Hello community,

here is the log from the commit of package link-grammar for openSUSE:Factory 
checked in at 2014-02-06 06:50:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/link-grammar (Old)
 and      /work/SRC/openSUSE:Factory/.link-grammar.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "link-grammar"

Changes:
--------
--- /work/SRC/openSUSE:Factory/link-grammar/link-grammar.changes        
2014-01-28 12:03:24.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.link-grammar.new/link-grammar.changes   
2014-02-06 06:50:11.000000000 +0100
@@ -1,0 +2,12 @@
+Mon Feb  3 22:06:51 UTC 2014 - [email protected]
+
+- Update to version 4.8.6:
+  + Fix minor OSX compiler warnings.
+  + Check for presence of Java ant before assuming it is there.
+  + Fix crash on certain sentences containing equals sign.
+  + Fix parsing of lists (blah, blah and blah).
+  + Fix build break for uClibc systems (Gentoo).
+  + Allow ungrammatical usage of 'ages' instead of 'aged'.
+  + Fix crash on certain sentences containing words with periods.
+
+-------------------------------------------------------------------

Old:
----
  link-grammar-4.8.5.tar.gz

New:
----
  link-grammar-4.8.6.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ link-grammar.spec ++++++
--- /var/tmp/diff_new_pack.npZknL/_old  2014-02-06 06:50:12.000000000 +0100
+++ /var/tmp/diff_new_pack.npZknL/_new  2014-02-06 06:50:12.000000000 +0100
@@ -17,13 +17,13 @@
 
 
 Name:           link-grammar
-Version:        4.8.5
+Version:        4.8.6
 Release:        0
 Summary:        An English grammar checker
 License:        BSD-3-Clause
 Group:          Productivity/Text/Spell
 Url:            http://www.abisource.com/projects/link-grammar/
-Source:         
http://www.abisource.com/downloads/link-grammar/4.8.5/%{name}-%{version}.tar.gz
+Source:         
http://www.abisource.com/downloads/link-grammar/4.8.6/%{name}-%{version}.tar.gz
 BuildRequires:  aspell-devel
 BuildRequires:  glibc-devel
 BuildRequires:  libedit-devel

++++++ link-grammar-4.8.5.tar.gz -> link-grammar-4.8.6.tar.gz ++++++
++++ 1807 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/AUTHORS new/link-grammar-4.8.6/AUTHORS
--- old/link-grammar-4.8.5/AUTHORS      2013-10-11 18:29:57.000000000 +0200
+++ new/link-grammar-4.8.6/AUTHORS      2014-01-22 04:06:59.000000000 +0100
@@ -29,6 +29,7 @@
 Evgenii Philippov <efilippov_at_gmail.com>
 Sergey Protasov <svp_at_tj.ru>
 Sampo Pyysalo <smp_at_is.s.u-tokyo.ac.jp>
+René Rhéaume <rene.rheaume_at_gmail.com>
 Lian Ruiting <lianlian1022_at_gmail.com>
 Murilo Saraiva de Queiroz <muriloq_at_gmail.com>
 Fridrich Strba <fridrich.strba_at_bluewin.ch>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/ChangeLog new/link-grammar-4.8.6/ChangeLog
--- old/link-grammar-4.8.5/ChangeLog    2014-01-06 00:06:58.000000000 +0100
+++ new/link-grammar-4.8.6/ChangeLog    2014-02-02 20:16:21.000000000 +0100
@@ -1,11 +1,20 @@
+Version 4.8.6 (2 February 2014)
+ * Fix minor OSX compiler warnings.
+ * Check for presence of Java ant before assuming it is there.
+ * Fix crash on certain sentences containing equals sign.
+ * Fix parsing of lists (blah, blah and blah).
+ * Fix build break for uClibc systems (Gentoo).
+ * Allow ungrammatical usage of 'ages' instead of 'aged'.
+ * Fix crash on certain sentences containing words with periods.
+
 Version 4.8.5 (5 January 2014)
  * Update memory usage accounting; fix accounting bugs.
  * Fix Java garbage collection bug.
  * Fix numerous compiler warnings in the SAT-solver code.
- * Fix build-break involving multiple declaration of 'Boolean'
+ * Fix build-break involving multiple declaration of 'Boolean'.
 
 Version 4.8.4 (30 December 2013)
- * Fix build break for Mac OSX
+ * Fix build break for Mac OSX.
 
 Version 4.8.3 (30 December 2013)
  * Create new msvc12 build files, restore old msvc9 files.
@@ -22,7 +31,7 @@
  * Add missing JSONUtils file.
 
 Version 4.8.1 (21 November 2013)
- * Ongoing work on viterbi.
+ * Ongoing work on Viterbi.
  * Updated MSVC9 project files from Jand Hashemi (Lucky--)
  * Fix important bug in Java services: return top parses, not random ones.
  * Java: for the link-diagram string, do not limit to 80 char term width.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/Makefile.am new/link-grammar-4.8.6/Makefile.am
--- old/link-grammar-4.8.5/Makefile.am  2013-11-25 22:45:28.000000000 +0100
+++ new/link-grammar-4.8.6/Makefile.am  2014-01-11 03:39:24.000000000 +0100
@@ -6,8 +6,7 @@
 ACLOCAL_AMFLAGS = -I m4
 
 # Build and install the jar file in $(PREFIX)/share/java ...
-# XXX FIXME configure should look to see if it can find ant
-if HAVE_JAVA
+if HAVE_ANT
 linkgrammar-@[email protected]:
        ant
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/NEWS new/link-grammar-4.8.6/NEWS
--- old/link-grammar-4.8.5/NEWS 2013-10-24 20:47:39.000000000 +0200
+++ new/link-grammar-4.8.6/NEWS 2014-01-06 00:29:32.000000000 +0100
@@ -1,3 +1,71 @@
+Version 4.8.5 of the Link Grammar Parser is now available. 
+
+This is the third release in about a week; each prompted by a
+build-break in the previous version.  Sorry!  There's been assorted
+(minor) new work, and this has been enough to cause trouble for
+various people.
+
+Some notable changes in the last 6 weeks:
+ * Improved Russian (UTF-8) support for MSWindows users.
+ * Build files for MSVC12
+ * Several Java binding fixes
+ * English dictionary: add a verb-wall connector for present participles.
+
+A full list of changes is given below. If none of these seem to affect
+you, there is no particular need to upgrade.
+
+--------------------
+
+The link-grammar homepage:
+http://www.abiword.org/projects/link-grammar/
+
+Download:
+http://www.abiword.org/downloads/link-grammar/4.7.9/link-grammar-4.7.9.tar.gz
+
+WHAT IS LINK GRAMMAR?
+The Link Grammar Parser is a syntactic parser of English (and other
+languages as well), based on link grammar, an original theory of English
+syntax.  Given a sentence, the system assigns to it a syntactic
+structure, which consists of a set of labelled links connecting pairs of
+words. The parser also produces a "constituent" (Penn tree-bank style
+phrase tree) representation of a sentence (showing noun phrases, verb
+phrases, etc.). The RelEx extension provides dependency-parse output.
+
+
+CHANGELOG:
+
+Version 4.8.5 (5 January 2014)
+ * Update memory usage accounting; fix accounting bugs.
+ * Fix Java garbage collection bug.
+ * Fix numerous compiler warnings in the SAT-solver code.
+ * Fix build-break involving multiple declaration of 'Boolean'.
+
+Version 4.8.4 (30 December 2013)
+ * Fix build break for Mac OSX.
+
+Version 4.8.3 (30 December 2013)
+ * Create new msvc12 build files, restore old msvc9 files.
+ * Revert location of the Windows mbrtowc declaration.
+ * Add verb-wall connector for present participles.
+ * Fix build-time include file directory paths.
+ * Provide the 'any' language to enumerate all possible linkages.
+ * Fix recognition of U+00A0, c2 a0, NO-BREAK SPACE as whitespace.
+ * Improve parse-time performance of exceptionally long sentences.
+ * Fix crash on certain sentences containing equals sign.
+
+Version 4.8.2 (25 November 2013)
+ * More MSWindows UTF-8/multi-byte fixes (for Russian).
+ * Add missing JSONUtils file.
+
+Version 4.8.1 (21 November 2013)
+ * Ongoing work on viterbi.
+ * Updated MSVC9 project files from Jand Hashemi (Lucky--)
+ * Fix important bug in Java services: return top parses, not random ones.
+ * Java: for the link-diagram string, do not limit to 80 char term width.
+ * Windows: UTF-8 fixes so that Russian works in most MSWindows locales.
+
+
+=================================================================
 Version 4.8.0 of the Link Grammar Parser is now available. 
 
 This is the start of a new version series, containing an important
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/README new/link-grammar-4.8.6/README
--- old/link-grammar-4.8.5/README       2014-01-03 21:22:30.000000000 +0100
+++ new/link-grammar-4.8.6/README       2014-01-13 18:32:40.000000000 +0100
@@ -1,7 +1,7 @@
 
                        Link Grammar Parser
                        -------------------
-                          Version 4.8.5
+                          Version 4.8.6
 
 The Link Grammar Parser implements the Sleator/Temperley/Lafferty
 theory of natural language parsing. This version of the parser is
@@ -65,7 +65,7 @@
    no malicious changes were made to the code internals by third
    parties. The signatures can be checked with the gpg command:
 
-   gpg --verify link-grammar-4.8.5.tar.gz.asc
+   gpg --verify link-grammar-4.8.6.tar.gz.asc
 
    which should generate output identical to (except for the date):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/configure.in new/link-grammar-4.8.6/configure.in
--- old/link-grammar-4.8.5/configure.in 2014-01-03 21:22:07.000000000 +0100
+++ new/link-grammar-4.8.6/configure.in 2014-01-13 17:31:26.000000000 +0100
@@ -1,4 +1,4 @@
-AC_INIT([link-grammar],[4.8.5],[[email protected]])
+AC_INIT([link-grammar],[4.8.6],[[email protected]])
 
 dnl Set release number
 dnl This is derived from "Versioning" chapter of info libtool documentation.
@@ -9,9 +9,9 @@
 dnl     6) Set to zero when removing or changing interfaces.
 LINK_MINOR_VERSION=8
 dnl     3) Increment when interfaces not changed at all,
-dnl               only bug fixes or internal changes made.
+dnl        only bug fixes or internal changes made.
 dnl     4b) Set to zero when adding, removing or changing interfaces.
-LINK_MICRO_VERSION=5
+LINK_MICRO_VERSION=6
 dnl
 dnl     Set this too
 MAJOR_VERSION_PLUS_MINOR_VERSION=`expr $LINK_MAJOR_VERSION + 
$LINK_MINOR_VERSION`
@@ -116,11 +116,11 @@
 
 if test "x$enable_debug" = "xyes"
 then
-       CFLAGS="${CFLAGS} -g"
-       LDFLAGS="${LDFLAGS} -g"
-       AC_DEFINE(DEBUG_MEMORY,1)
+       CFLAGS="${CFLAGS} -g"
+       LDFLAGS="${LDFLAGS} -g"
+       AC_DEFINE(DEBUG_MEMORY,1)
 else
-       AC_DEFINE(DEBUG_MEMORY,0)
+       AC_DEFINE(DEBUG_MEMORY,0)
 fi
 
 dnl ====================================================================
@@ -132,8 +132,8 @@
 
 if test "x$enable_mudflap" = "xyes"
 then
-       CFLAGS="${CFLAGS} -fmudflap"
-       LDFLAGS="${LDFLAGS} -fmudflap -lmudflap"
+       CFLAGS="${CFLAGS} -fmudflap"
+       LDFLAGS="${LDFLAGS} -fmudflap -lmudflap"
 fi
 
 dnl ====================================================================
@@ -145,8 +145,8 @@
 )
 if test "x$enable_profile" = "xyes"
 then
-       CFLAGS="${CFLAGS} -pg"
-       LDFLAGS="${LDFLAGS} -pg"
+       CFLAGS="${CFLAGS} -pg"
+       LDFLAGS="${LDFLAGS} -pg"
 fi
 
 dnl ====================================================================
@@ -158,7 +158,7 @@
 )
 if test "x$enable_pthreads" = "xyes"
 then
-       CPPFLAGS="${CPPFLAGS} -DUSE_PTHREADS=1"
+       CPPFLAGS="${CPPFLAGS} -DUSE_PTHREADS=1"
 fi
 
 
@@ -189,14 +189,14 @@
 )
 
 if test "x$enable_sat_solver" = "xyes"; then
-       CPPFLAGS="${CPPFLAGS} -DUSE_SAT_SOLVER=1"
+       CPPFLAGS="${CPPFLAGS} -DUSE_SAT_SOLVER=1"
 
-       # We want to check for C++; the easiest way to do this is to
-       # use c++ to compile stdio.h and bomb if it fails.
-       AC_LANG([C++])
-       AC_CHECK_HEADER([stdio.h],,
-           [AC_MSG_ERROR([C++ compiler not found; it is needed for the SAT 
parser])])
-       AC_LANG([C])
+       # We want to check for C++; the easiest way to do this is to
+       # use c++ to compile stdio.h and bomb if it fails.
+       AC_LANG([C++])
+       AC_CHECK_HEADER([stdio.h],,
+               [AC_MSG_ERROR([C++ compiler not found; it is needed for the SAT 
parser])])
+       AC_LANG([C])
 fi
 
 AM_CONDITIONAL(WITH_SAT_SOLVER, test x${enable_sat_solver} = xyes)
@@ -241,7 +241,7 @@
 )
 if test "x$enable_corpus_stats" = "xyes"
 then
-       CPPFLAGS="${CPPFLAGS} -DUSE_CORPUS=1"
+       CPPFLAGS="${CPPFLAGS} -DUSE_CORPUS=1"
 fi
 
 AM_CONDITIONAL(WITH_CORPUS, test x${enable_corpus_stats} = xyes)
@@ -565,12 +565,18 @@
 
    AC_SUBST(CPPFLAGS)
 
-   # For now, we assume that if the jni files are there, then the 
-   # javac, ant, and jar compilers/builders are installed as well.
-   # These are used to build the jar file and install it.
-   AM_CONDITIONAL(HAVE_JAVA, test x${JNIfound} = xyes)
+       # This allows jni-client.c to be built
+       AM_CONDITIONAL(HAVE_JAVA, test x${JNIfound} = xyes)
+
+       # For now, we assume that if the ant tool is there, then the javac and
+       # jar compiler/packager are installed as well. These are needed to build
+       # the jar file and install it.
+       AC_CHECK_PROG(ANTfound,ant,yes,no)
+       AM_CONDITIONAL(HAVE_ANT, test x${ANTfound} = xyes)
+
 else
    AM_CONDITIONAL(HAVE_JAVA, false)
+   AM_CONDITIONAL(HAVE_ANT, false)
 fi
 
 dnl ===================================================================
@@ -617,7 +623,8 @@
        autopackage:                    ${br_cv_binreloc}
        Posix threads:                  ${enable_pthreads}
        Editline command-line history:  ${edlin}
-       Java interfaces:                ${JNIfound}
+       Java libraries:                 ${JNIfound}
+       Java interfaces:                ${ANTfound}
        ASpell spell checker:           ${ASpellFound}
        HunSpell spell checker:         ${HunSpellFound}
        HunSpell dictionary location:   ${HunSpellDictDir}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/data/en/4.0.dict new/link-grammar-4.8.6/data/en/4.0.dict
--- old/link-grammar-4.8.5/data/en/4.0.dict     2013-12-31 00:56:54.000000000 
+0100
+++ new/link-grammar-4.8.6/data/en/4.0.dict     2014-02-02 16:56:08.000000000 
+0100
@@ -10,8 +10,8 @@
  %                                                                           %
  %***************************************************************************%
 
-% Dictionary version number is 4.8.4 (formatted as V4v8v4+)
-<dictionary-version-number>: V4v8v4+;
+% Dictionary version number is 4.8.6 (formatted as V4v8v6+)
+<dictionary-version-number>: V4v8v6+;
 
  % _ORGANIZATION OF THE DICTIONARY_
  %
@@ -2142,37 +2142,6 @@
 % and <verb-s-sp,pp> variants as well.  Maybe. I can't think of good
 % examples that actually need this.
 
-% EQUATIONS ETC.
-%
-% The below is just barely enough to parse just very simple equations
-% and expressions, nothing complex -- no general math or anything like
-% that. Relations are treated as "transitive verbs", taking a subject
-% and requiring an object.
-
-% Relations
-% "verb" use, e.g. "( p < 0.01 )" for "( p is less than 0.01 )"
-=.v <.v >.v =<.v >=.v ==.v eq.v ne.v lt.v lte.v le.v gt.v gte.v ge.v
-equiv.v sim.v simeq.v approx.v ~.v ~.v:
-  ([S- & <verb-wall>] or EQ*r-) & ([O+] or EQ*r+) &
-  (Xd- & (Xc+ or <costly-null>) & (MX- or MVa-));
-
-% Binary operators:
-% these occur in "simple" expressions
-*.v "/.v" +.v -.v x.v:
-  ([S- & <verb-wall>] or EQ-) &  ([O+] or EQ+) &
-  (Xd- & (Xc+ or <costly-null>) & (MX- or MVa-));
-
-% Binary operators, strict:
-% Here EQt attaches only to terms, which may be numbers or letters.
-% By contrast, EQrr can only attach to relations (=, < > etc.)
-+.eq -.eq *.eq "/.eq" x.eqn:
-(EQt+ & EQt-) & (EQrr- or EQrr+ or AN+);
-
-->.eq -->.eq: (S- & O+ ) & (AN+ or (Xd- & Xc+ & MX-)) & <verb-wall>;
-
-% "adverb" use, e.g. "< 10" for "less than 10"
-=.e <.e =<.e <=.e >.e >=.e +.e -.e x.e: EN+;
-
 % AUXILIARY VERBS
 
 %<vc-do>: (((B- or O+ or [[@MV+ & O*n+]] or Vd+ or ({N+} & (CX- or [[()]]))) & 
{@MV+})
@@ -2543,6 +2512,44 @@
   (<verb-and-sp-> & {@E-} & (({RT+} & I+) or [[()]])) or
   ({@E-} & (({RT+} & I+) or [[()]]) & <verb-and-sp+>);
 
+% EQUATIONS ETC.
+%
+% The below is just barely enough to parse just very simple equations
+% and expressions, nothing complex -- no general math or anything like
+% that. Relations are treated as "is.v", taking a subject and requiring
+% an object (For example, "I think that x = 4", "I think that x is 4").
+
+% Relations
+% "verb" use. Two types: one is a synonym for "is", such as
+% "I think that x = 4".
+% The other is parenthetical remarks:
+% e.g. "( p < 0.01 )" for "( p is less than 0.01 )"
+% The parenthetical remarks must be offset by parenthesis, and
+% must link back to main clause with MV or MX.
+=.v <.v >.v =<.v >=.v ==.v eq.v ne.v lt.v lte.v le.v gt.v gte.v ge.v
+equiv.v sim.v simeq.v approx.v ~.v ~.v:
+  (<verb-x-s> & <vc-be>)
+  or (([S- & <verb-wall>] or EQ*r-)
+     & ([O+] or EQ*r+)
+     & (Xd- & (Xc+ or <costly-null>) & (MX- or MVa-)));
+
+% Binary operators:
+% these occur in "simple" expressions
+*.v "/.v" +.v -.v x.v:
+  ([S- & <verb-wall>] or EQ-) &  ([O+] or EQ+) &
+  (Xd- & (Xc+ or <costly-null>) & (MX- or MVa-));
+
+% Binary operators, strict:
+% Here EQt attaches only to terms, which may be numbers or letters.
+% By contrast, EQrr can only attach to relations (=, < > etc.)
++.eq -.eq *.eq "/.eq" x.eqn:
+(EQt+ & EQt-) & (EQrr- or EQrr+ or AN+);
+
+->.eq -->.eq: (S- & O+ ) & (AN+ or (Xd- & Xc+ & MX-)) & <verb-wall>;
+
+% "adverb" use, e.g. "< 10" for "less than 10"
+=.eq <.e =<.e <=.e >.e >=.e +.e -.e x.e: EN+;
+
 % ===================================================================
 % COMMON VERB CATEGORIES (The last number of the file name indicates
 % the verb form: 1=plural-infinitive, 2=singular, 3=past("ed"),
@@ -7608,11 +7615,11 @@
     <MX-PHRASE> or
     [<OPENER>] or
     [[R-]] or
-    (SFsx+ & <S-CLAUSE>))) or
-  (TO- & Xc+) or
-  I*a+ or
-  ({JQ+} & ([J+] or Mgp+) & <prep-main-a>) or
-  [MVp- & B-];
+    (SFsx+ & <S-CLAUSE>)))
+  or (TO- & Xc+)
+  or I*a+
+  or ({JQ+} & ([J+] or Mgp+) & <prep-main-a>)
+  or [MVp- & B-];
 
 so_as_to: I+ & {Xd- & Xc+} & MVi-;
 
@@ -8576,12 +8583,12 @@
 % "I saw the (dog and pony) show"
 %
 % and_not ,_not: "I saw John, not Mary"
-% We treat this her as an idiom, even though it's explicitly hanled for
+% We treat this here as an idiom, even though it's explicitly hanled for
 % AJ nd RJ conjunctions.  Its just easier, for now.
 %
 % {Jd- & Dm-}: "A number of recommendations and suggestions were made"
 %   with "number of" modifying the and.j-n
-% [[<noun-conj-head>]] costs so that above is prefered:
+% [[<noun-conj-head>]] costs so that above is prefered: (huh????)
 % "there was enough of the beer and sandwiches"
 
 and.j-n but_not and_not ,_not:
@@ -8592,13 +8599,13 @@
     or [{Ds-} & Os-]
     or <post-nominal-s>))
   or (<noun-conj-dep-p> & <noun-sub-p> & (
-    [[<noun-conj-head>]]
+    <noun-conj-head>
     or ({Jd- & Dm-} & Spx+ & <CLAUSE>)
     or SIp-
     or [{{Jd-} & Dmc-} & Op-]
     or <post-nominal-p>))
   or (<noun-conj-dep-u> & <noun-sub-x> & (
-    [[<noun-conj-head>]]
+    <noun-conj-head>
     or ({Jd- & Dm-} & Sux+ & <CLAUSE>)
     or SIu-
     or [{{Jd-} & Dmu-} &  Ou-]
@@ -8785,8 +8792,12 @@
   <ordinary-adj> or
   (Ytm- & (Pa- or Ma- or <adj-op> or MJra- or MJla+));
 
-% ??? adj-op already has MX*a- in it, why do we need a bar MX- here ?
-aged.i: NM+ & (Pa- or Max- or <adj-op> or (Xd- & MX- & Xc+) or MJra- or MJla+);
+% ??? adj-op already has MX*a- in it, why do we need a bare MX- here ?
+<aged>: NM+ & (Pa- or Max- or <adj-op> or (Xd- & MX- & Xc+) or MJra- or MJla+);
+aged.i: <aged>;
+% People aged 20-40 sometimes write "people ages 20-40..."  so make
+% "ages" work like aged, but with a cost.
+ages.i: [<aged>];
 
 % The following all have a very regular pattern, with just one variable
 % part, the TO TH type section.  This regularity should be exploted so
@@ -9985,7 +9996,10 @@
   <ordinary-adj> or
   ({{Ic-} & [[Wi-]]} & {{Xd-} & Xc+} & Ic+);
 
-".": ((Xp- or ({@Xca-} & Xc-)) & RW+) or Xi-;
+% Cost on Xc- because Xc is intended for commas, not periods.
+% Without this cost, lists, such as "Paris, London and Berlin." 
+% get linked incorrectly with the MX link.
+".": ((Xp- or ({@Xca-} & [[Xc-]])) & RW+) or Xi-;
 
 "!" "?" ‽ ؟ ?!: ((Xp- or ({@Xca-} & Xc-)) & RW+) or ({@Xca-} & Xq+);
 
@@ -10022,7 +10036,7 @@
   or <comma-adj-conjunction>
   or <comma-adv-conjunction>
   or <verb-conjunction>
-  or [[SJl- & SJr+ & SJl+]]
+  or (SJl- & SJr+ & SJl+)
   or (SJn- & SJr+ & SJn+);
 
 % :.j
@@ -10269,9 +10283,12 @@
     & {WV+}
     & {CP+} & {Xx+} & {RW+ or Xp+};
 
-RIGHT-WALL: RW- or ({@Xca-} & Xc-);
+% Cost on Xc- because Xc is intended for commas, not sentence-ends.
+% Without this cost, the right wall gets used incorrectly with MX links.
+RIGHT-WALL: RW- or ({@Xca-} & [[Xc-]]);
 
-% XXX ANDABLE-CONNECTORS is now deprecated, needs to be removed for version 5.0
+% XXX ANDABLE-CONNECTORS is now deprecated, needs to be removed for 
+% version 5.0. These were used with fat-links, which are now gone.
 ANDABLE-CONNECTORS:   % these are the connectors that can be combined by
                       % conjunctions. They are listed alphabetically.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/data/en/4.0.dict.m4 
new/link-grammar-4.8.6/data/en/4.0.dict.m4
--- old/link-grammar-4.8.5/data/en/4.0.dict.m4  2013-12-31 00:57:22.000000000 
+0100
+++ new/link-grammar-4.8.6/data/en/4.0.dict.m4  2014-02-02 16:55:56.000000000 
+0100
@@ -19,8 +19,8 @@
  %                                                                           %
  %***************************************************************************%
 
-% Dictionary version number is 4.8.4 (formatted as V4v8v4+)
-<dictionary-version-number>: V4v8v4+;
+% Dictionary version number is 4.8.6 (formatted as V4v8v6+)
+<dictionary-version-number>: V4v8v6+;
 
  % _ORGANIZATION OF THE DICTIONARY_
  %
@@ -2197,37 +2197,6 @@
 % and <verb-s-sp,pp> variants as well.  Maybe. I can't think of good
 % examples that actually need this.
 
-% EQUATIONS ETC.
-%
-% The below is just barely enough to parse just very simple equations
-% and expressions, nothing complex -- no general math or anything like
-% that. Relations are treated as "transitive verbs", taking a subject
-% and requiring an object.
-
-% Relations
-% "verb" use, e.g. "( p < 0.01 )" for "( p is less than 0.01 )"
-=.v <.v >.v =<.v >=.v ==.v eq.v ne.v lt.v lte.v le.v gt.v gte.v ge.v
-equiv.v sim.v simeq.v approx.v ~.v ~.v:
-  ([S- & <verb-wall>] or EQ*r-) & ([O+] or EQ*r+) &
-  (Xd- & (Xc+ or <costly-null>) & (MX- or MVa-));
-
-% Binary operators:
-% these occur in "simple" expressions
-*.v "/.v" +.v -.v x.v:
-  ([S- & <verb-wall>] or EQ-) &  ([O+] or EQ+) &
-  (Xd- & (Xc+ or <costly-null>) & (MX- or MVa-));
-
-% Binary operators, strict:
-% Here EQt attaches only to terms, which may be numbers or letters.
-% By contrast, EQrr can only attach to relations (=, < > etc.)
-+.eq -.eq *.eq "/.eq" x.eqn:
-(EQt+ & EQt-) & (EQrr- or EQrr+ or AN+);
-
-->.eq -->.eq: (S- & O+ ) & (AN+ or (Xd- & Xc+ & MX-)) & <verb-wall>;
-
-% "adverb" use, e.g. "< 10" for "less than 10"
-=.e <.e =<.e <=.e >.e >=.e +.e -.e x.e: EN+;
-
 % AUXILIARY VERBS
 
 %<vc-do>: (((B- or O+ or [[@MV+ & O*n+]] or Vd+ or ({N+} & (CX- or [[()]]))) & 
{@MV+})
@@ -2586,6 +2555,44 @@
   (<verb-and-sp-> & {@E-} & (({RT+} & I+) or [[()]])) or
   ({@E-} & (({RT+} & I+) or [[()]]) & <verb-and-sp+>);
 
+% EQUATIONS ETC.
+%
+% The below is just barely enough to parse just very simple equations
+% and expressions, nothing complex -- no general math or anything like
+% that. Relations are treated as "is.v", taking a subject and requiring
+% an object (For example, "I think that x = 4", "I think that x is 4").
+
+% Relations
+% "verb" use. Two types: one is a synonym for "is", such as
+% "I think that x = 4".
+% The other is parenthetical remarks:
+% e.g. "( p < 0.01 )" for "( p is less than 0.01 )"
+% The parenthetical remarks must be offset by parenthesis, and
+% must link back to main clause with MV or MX.
+=.v <.v >.v =<.v >=.v ==.v eq.v ne.v lt.v lte.v le.v gt.v gte.v ge.v
+equiv.v sim.v simeq.v approx.v ~.v ~.v:
+  (<verb-x-s> & <vc-be>)
+  or (([S- & <verb-wall>] or EQ*r-)
+     & ([O+] or EQ*r+)
+     & (Xd- & (Xc+ or <costly-null>) & (MX- or MVa-)));
+
+% Binary operators:
+% these occur in "simple" expressions
+*.v "/.v" +.v -.v x.v:
+  ([S- & <verb-wall>] or EQ-) &  ([O+] or EQ+) &
+  (Xd- & (Xc+ or <costly-null>) & (MX- or MVa-));
+
+% Binary operators, strict:
+% Here EQt attaches only to terms, which may be numbers or letters.
+% By contrast, EQrr can only attach to relations (=, < > etc.)
++.eq -.eq *.eq "/.eq" x.eqn:
+(EQt+ & EQt-) & (EQrr- or EQrr+ or AN+);
+
+->.eq -->.eq: (S- & O+ ) & (AN+ or (Xd- & Xc+ & MX-)) & <verb-wall>;
+
+% "adverb" use, e.g. "< 10" for "less than 10"
+=.eq <.e =<.e <=.e >.e >=.e +.e -.e x.e: EN+;
+
 % ===================================================================
 % COMMON VERB CATEGORIES (The last number of the file name indicates
 % the verb form: 1=plural-infinitive, 2=singular, 3=past("ed"),
@@ -5705,11 +5712,11 @@
     <MX-PHRASE> or
     [<OPENER>] or
     [[R-]] or
-    (SFsx+ & <S-CLAUSE>))) or
-  (TO- & Xc+) or
-  I*a+ or
-  ({JQ+} & ([J+] or Mgp+) & <prep-main-a>) or
-  [MVp- & B-];
+    (SFsx+ & <S-CLAUSE>)))
+  or (TO- & Xc+)
+  or I*a+
+  or ({JQ+} & ([J+] or Mgp+) & <prep-main-a>)
+  or [MVp- & B-];
 
 so_as_to: I+ & {Xd- & Xc+} & MVi-;
 
@@ -6673,12 +6680,12 @@
 % "I saw the (dog and pony) show"
 %
 % and_not ,_not: "I saw John, not Mary"
-% We treat this her as an idiom, even though it's explicitly hanled for
+% We treat this here as an idiom, even though it's explicitly hanled for
 % AJ nd RJ conjunctions.  Its just easier, for now.
 %
 % {Jd- & Dm-}: "A number of recommendations and suggestions were made"
 %   with "number of" modifying the and.j-n
-% [[<noun-conj-head>]] costs so that above is prefered:
+% [[<noun-conj-head>]] costs so that above is prefered: (huh????)
 % "there was enough of the beer and sandwiches"
 
 and.j-n but_not and_not ,_not:
@@ -6689,13 +6696,13 @@
     or [{Ds-} & Os-]
     or <post-nominal-s>))
   or (<noun-conj-dep-p> & <noun-sub-p> & (
-    [[<noun-conj-head>]]
+    <noun-conj-head>
     or ({Jd- & Dm-} & Spx+ & <CLAUSE>)
     or SIp-
     or [{{Jd-} & Dmc-} & Op-]
     or <post-nominal-p>))
   or (<noun-conj-dep-u> & <noun-sub-x> & (
-    [[<noun-conj-head>]]
+    <noun-conj-head>
     or ({Jd- & Dm-} & Sux+ & <CLAUSE>)
     or SIu-
     or [{{Jd-} & Dmu-} &  Ou-]
@@ -6882,8 +6889,12 @@
   <ordinary-adj> or
   (Ytm- & (Pa- or Ma- or <adj-op> or MJra- or MJla+));
 
-% ??? adj-op already has MX*a- in it, why do we need a bar MX- here ?
-aged.i: NM+ & (Pa- or Max- or <adj-op> or (Xd- & MX- & Xc+) or MJra- or MJla+);
+% ??? adj-op already has MX*a- in it, why do we need a bare MX- here ?
+<aged>: NM+ & (Pa- or Max- or <adj-op> or (Xd- & MX- & Xc+) or MJra- or MJla+);
+aged.i: <aged>;
+% People aged 20-40 sometimes write "people ages 20-40..."  so make
+% "ages" work like aged, but with a cost.
+ages.i: [<aged>];
 
 % The following all have a very regular pattern, with just one variable
 % part, the TO TH type section.  This regularity should be exploted so
@@ -8082,7 +8093,10 @@
   <ordinary-adj> or
   ({{Ic-} & [[Wi-]]} & {{Xd-} & Xc+} & Ic+);
 
-".": ((Xp- or ({@Xca-} & Xc-)) & RW+) or Xi-;
+% Cost on Xc- because Xc is intended for commas, not periods.
+% Without this cost, lists, such as "Paris, London and Berlin." 
+% get linked incorrectly with the MX link.
+".": ((Xp- or ({@Xca-} & [[Xc-]])) & RW+) or Xi-;
 
 "!" "?" ‽ ؟ ?!: ((Xp- or ({@Xca-} & Xc-)) & RW+) or ({@Xca-} & Xq+);
 
@@ -8119,7 +8133,7 @@
   or <comma-adj-conjunction>
   or <comma-adv-conjunction>
   or <verb-conjunction>
-  or [[SJl- & SJr+ & SJl+]]
+  or (SJl- & SJr+ & SJl+)
   or (SJn- & SJr+ & SJn+);
 
 % :.j
@@ -8358,9 +8372,12 @@
     & {WV+}
     & {CP+} & {Xx+} & {RW+ or Xp+};
 
-RIGHT-WALL: RW- or ({@Xca-} & Xc-);
+% Cost on Xc- because Xc is intended for commas, not sentence-ends.
+% Without this cost, the right wall gets used incorrectly with MX links.
+RIGHT-WALL: RW- or ({@Xca-} & [[Xc-]]);
 
-% XXX ANDABLE-CONNECTORS is now deprecated, needs to be removed for version 5.0
+% XXX ANDABLE-CONNECTORS is now deprecated, needs to be removed for 
+% version 5.0. These were used with fat-links, which are now gone.
 ANDABLE-CONNECTORS:   % these are the connectors that can be combined by
                       % conjunctions. They are listed alphabetically.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/data/en/4.0.fixes.batch 
new/link-grammar-4.8.6/data/en/4.0.fixes.batch
--- old/link-grammar-4.8.5/data/en/4.0.fixes.batch      2013-12-23 
04:05:48.000000000 +0100
+++ new/link-grammar-4.8.6/data/en/4.0.fixes.batch      2014-02-02 
20:12:57.000000000 +0100
@@ -2949,6 +2949,9 @@
 7 month old female presents with chest congestion.
 John, aged 80, is ill.
 
+% People aged 20-40 don't know how to use the word "aged".
+People ages 55 to 64 on average are out of work for more than 54 weeks, while 
those ages 25 to 34 are unemployed for about 36 weeks, according to figures 
from the Bureau of Labor Statistics.
+
 % Technical speech - missing definite articles.
 Physical Volumes (LUN) allocated from SAN pool zoned to VIOS.
 
@@ -3791,6 +3794,7 @@
 His convalescence was relatively brief and he was able to return and fight at 
The Wilderness, Spotsylvania and Cold Harbor.
 Hot runners usually make the mold more expensive to manufacture and run, but 
allow savings by reducing plastic waste and by reducing the cycle time.
 Dietrich A. Loeber, ‘“Socialist” Features of Soviet Copyright Law’, Columbia 
Journal of Transnational Law, vol. 23, pp 297--313, 1984.
+*You need it most.Either way you cant lose.
 
 % Overly long sentences leading to overflow
 I think one of the chief differences between the main Filipino language, which 
is Tagalog, and English, when I hear Tagalog speakers speaking English, is that 
they tend to place the stress on the wrong syllable of a word or they stress 
the wrong word in the sentence or in the question.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar/api.c 
new/link-grammar-4.8.6/link-grammar/api.c
--- old/link-grammar-4.8.5/link-grammar/api.c   2014-01-05 22:29:57.000000000 
+0100
+++ new/link-grammar-4.8.6/link-grammar/api.c   2014-02-02 20:57:56.000000000 
+0100
@@ -99,7 +99,7 @@
        /* Here's where the values are initialized */
        po->verbosity    = 1;
        po->linkage_limit = 100;
-       po->disjunct_cost = MAX_DISJUNCT_COST;
+       po->disjunct_cost = 2.0f;   /* Maybe should be 1.0f ?? */
        po->min_null_count = 0;
        po->max_null_count = 0;
        po->null_block = 1;
@@ -224,23 +224,29 @@
 }
 #endif /* USE_FAT_LINKAGES */
 
-void parse_options_set_linkage_limit(Parse_Options opts, int dummy) {
+void parse_options_set_linkage_limit(Parse_Options opts, int dummy)
+{
        opts->linkage_limit = dummy;
 }
-int parse_options_get_linkage_limit(Parse_Options opts) {
+int parse_options_get_linkage_limit(Parse_Options opts)
+{
        return opts->linkage_limit;
 }
 
-void parse_options_set_disjunct_cost(Parse_Options opts, int dummy) {
+void parse_options_set_disjunct_cost(Parse_Options opts, int dummy)
+{
        opts->disjunct_cost = dummy;
 }
-void parse_options_set_disjunct_costf(Parse_Options opts, float dummy) {
+void parse_options_set_disjunct_costf(Parse_Options opts, float dummy)
+{
        opts->disjunct_cost = dummy;
 }
-int parse_options_get_disjunct_cost(Parse_Options opts) {
+int parse_options_get_disjunct_cost(Parse_Options opts)
+{
        return (int) ceilf(opts->disjunct_cost);
 }
-float parse_options_get_disjunct_costf(Parse_Options opts) {
+float parse_options_get_disjunct_costf(Parse_Options opts)
+{
        return opts->disjunct_cost;
 }
 
@@ -795,7 +801,6 @@
        sent->num_linkages_post_processed = 0;
        sent->num_valid_linkages = 0;
        sent->link_info = NULL;
-       sent->num_valid_linkages = 0;
        sent->null_count = 0;
        sent->parse_info = NULL;
        sent->string_set = string_set_create();
@@ -1008,7 +1013,8 @@
 #endif /* USE_FAT_LINKAGES */
 }
 
-int sentence_disjunct_cost(Sentence sent, int i) {
+int sentence_disjunct_cost(Sentence sent, int i)
+{
        if (!sent) return 0;
 
        /* The sat solver (currently) fails to fill in link_info */
@@ -1038,16 +1044,16 @@
 #define INFIX_MARK '='
 
 /**
- * This routine solves the problem of mis-link stem + suffix.
+ * This routine solves the problem of mis-linked stem + suffix.
  * It checks that the actual stem+suffix, when concatenated, restores
  * the original word.  This is a work-around for somewhat sloppy
  * dictionaries, which aren't entirely careful with making sure
  * that the stem+suffix links are unique. Here's an illustration of
  * the problem: The word Russian "тест" can be split into 
- * тест.= =.ndmsi and also тес.= =т.amss The, during linkage, 
+ * тест.= =.ndmsi and also тес.= =т.amss  Then, during linkage, 
  * тес.= and =.ndmsi are linked -- but this is not the original word; 
  * its junk.  This routine marks such linkages as 'bad'.  Really, the
- * dictionary should be fixed, but what the hell. This isn't hard.
+ * dictionary should be fixed, but what the hell. This check isn't hard.
  */
 static void sane_morphism(Sentence sent, Parse_Options opts)
 {
@@ -1057,6 +1063,11 @@
        for (lk = 0; lk < sent->num_linkages_alloced; lk++)
        {
                Linkage_info *lifo = &sent->link_info[lk];
+
+               /* Don't bother with linkages that already failed 
post-processing... */
+               if (0 != lifo->N_violations)
+                       continue;
+
                extract_links(lifo->index, pi);
                for (i=0; i<sent->length; i++)
                {
@@ -1088,8 +1099,11 @@
                                        continue;
                        }
 
-                       /* If this word isn't a stem, and the next word isn't
-                        * a suffix, there's nothing to check. */
+                       /* If this word isn't a stem, **and** the next word 
isn't
+                        * a suffix, there's nothing to check. (We do need to 
reject
+                        * the case where this word is a stem but the next is 
not a
+                        * suffix, or vice-versa.)
+                        */
                        len = strlen(djw);
                        if ((INFIX_MARK != djw[len-1]) &&
                            ((i+1) < sent->length) && 
@@ -1151,7 +1165,7 @@
        if (sent->parse_info) free_parse_info(sent->parse_info);
        sent->parse_info = parse_info_new(sent->length);
 
-       for (nl = opts->min_null_count; nl<=opts->max_null_count ; ++nl)
+       for (nl = opts->min_null_count; nl <= opts->max_null_count ; ++nl)
        {
                s64 total;
                if (resources_exhausted(opts->resources)) break;
@@ -1164,18 +1178,9 @@
                                sent->null_count, total);
                }
 
-               /* Give up if the parse count is overflowing */
-               if ((PARSE_NUM_OVERFLOW < total) || (total < 0))
-               {
-                       if (verbosity > 0)
-                       {
-                               prt_error("WARNING: Combinatorial explosion! 
nulls=%d cnt=%lld\n"
-                                       "Consider retrying the parse with the 
max allowed disjunct cost set lower.\n",
-                                       sent->null_count, total);
-                       }
-                       total = (total>INT_MAX) ? INT_MAX : total;
-                       total = (total<0) ? INT_MAX : total;
-               }
+               /* total is 64-bit, num_linkages_found is 32-bit. Clamp */
+               total = (total>INT_MAX) ? INT_MAX : total;
+               total = (total<0) ? INT_MAX : total;
 
                sent->num_linkages_found = (int) total;
                print_time(opts, "Counted parses");
@@ -1255,6 +1260,14 @@
        }
        print_time(opts, "Finished parse");
 
+       if ((verbosity > 0) && 
+          (PARSE_NUM_OVERFLOW < sent->num_linkages_found))
+       {
+               prt_error("WARNING: Combinatorial explosion! nulls=%d cnt=%d\n"
+                       "Consider retrying the parse with the max allowed 
disjunct cost set lower.\n"
+                       "At the command line, use !cost-max\n",
+                       sent->null_count, sent->num_linkages_found);
+       }
        assert(0 <= sent->num_valid_linkages, "Miscount of valid linkages!")
        return sent->num_valid_linkages;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar/dict-file/read-dict.c 
new/link-grammar-4.8.6/link-grammar/dict-file/read-dict.c
--- old/link-grammar-4.8.5/link-grammar/dict-file/read-dict.c   2013-12-06 
16:44:14.000000000 +0100
+++ new/link-grammar-4.8.6/link-grammar/dict-file/read-dict.c   2014-02-02 
21:10:58.000000000 +0100
@@ -472,39 +472,31 @@
 }
 
 /**
- * dict_order_wild() -- order dictionary strings, with wildcard.
- * Assuming that s is a pointer to a dictionary string, and that
- * t is a pointer to a search string, this returns 0 if they
- * match, >0 if s>t, and <0 if s<t.
+ * dict_order_user() -- order user vs. dictionary string.
+ * Assuming that s is a pointer to the search string, and that t is
+ * a pointer to a dictionary string, this returns 0 if they match, 
+ * returns >0 if s>t, and <0 if s<t.
  *
  * The matching is done as follows.  Walk down the strings until
  * you come to the end of one of them, or until you find unequal
- * characters.  A "*" matches anything.  Otherwise, replace "."
- * by "\0", and take the difference.  This behavior matches that
- * of the function dict_order().
+ * characters.  If the dictionary string contains a dot ".", then
+ * replace "." by "\0", and take the difference.  This behavior
+ * matches that of the function dict_order(), except that here, we
+ * allow user-provided strings with dots in them.  Yes, these are
+ * non-words, probably due to some broken input, but hey ... users
+ * give us broken input all the time...
  *
- * Note: words in the dictionary itself don't have wild-card
- * chars in them; the wild-card support is here only if you are
- * searching for part of a word.
- *
- * XXX ... except that essentially no one is searching for a fraction
- * of a word, and so this wild-card search is ... unused.  Mostly
- * harmless, I suppose ...
- */
-static inline int dict_order_wild(const char * s, const char * t)
-{
-       const char *so = s;
-       while((*s != '\0') && (*s == *t)) {s++; t++;}
-
-       if ((*s == '*') || (*t == '*'))
-       {
-               /* Do not allow wild-card as the very first char.
-                * Basically, allow *.v and *.eq in the English dict.
-                */
-               if (s != so) return 0;
-       }
-
-       return (((*s == '.')?(0):(*s)) - ((*t == '.')?(0):(*t)));
+ * With one odd-ball exception: if the user-provided string is
+ * one or more dots (e.g. a period at end of sentence, or an ellipsis)
+ * then we do have to match those (i.e. use a null-byte).
+ */
+static inline int dict_order_user(const char * s, Dict_node * dn)
+{
+       const char * so = s;
+       const char * t = dn->string;
+       while ((*s != '\0') && (*s == *t)) {s++; t++;}
+       // return (*s) - ((*t == '.')?(0):(*t));
+       return (('.' == *so)?(0):(*s)) - ((*t == '.')?(0):(*t));
 }
 
 /**
@@ -613,7 +605,7 @@
 /**
  * rdictionary_lookup() -- recursive dictionary lookup
  * Walk binary tree, given by 'dn', looking for the string 's'.
- * For every node in the tree where 's' matches (including wildcards)
+ * For every node in the tree where 's' matches (including wildcards),
  * make a copy of that node, and append it to llist.
  */
 static Dict_node * rdictionary_lookup(Dict_node *llist,
@@ -623,7 +615,7 @@
        int m;
        Dict_node * dn_new;
        if (dn == NULL) return llist;
-       m = dict_order_wild(s, dn->string);
+       m = dict_order_user(s, dn);
        if (m >= 0)
        {
                llist = rdictionary_lookup(llist, dn->right, s, match_idiom);
@@ -1802,11 +1794,15 @@
 
 /* ======================================================================= */
 /* the following functions are for handling deletion */
+
+#ifdef USEFUL_BUT_NOT_CURRENTLY_USED
 /**
  * Returns true if it finds a non-idiom dict_node in a file that matches
  * the string s.
  *
  * Also sets parent and to_be_deleted appropriately.
+ * Note: this function is used in only one place: delete_dictionary_words()
+ * which is, itself, not currently used ...
  */
 static Boolean find_one_non_idiom_node(Dict_node * p, Dict_node * dn,
                                    const char * s,
@@ -1814,7 +1810,7 @@
 {
        int m;
        if (dn == NULL) return FALSE;
-       m = dict_order_wild(s, dn->string);
+       m = dict_order_user(s, dn);
        if (m <= 0) {
                if (find_one_non_idiom_node(dn,dn->left, s, parent, 
to_be_deleted)) return TRUE;
        }
@@ -1885,6 +1881,7 @@
                if (!find_one_non_idiom_node(NULL, dict->root, s, &parent, 
&to_be_deleted)) return TRUE;
        }
 }
+#endif /* USEFUL_BUT_NOT_CURRENTLY_USED */
 
 static void free_Word_file(Word_file * wf)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar/link-features.h 
new/link-grammar-4.8.6/link-grammar/link-features.h
--- old/link-grammar-4.8.5/link-grammar/link-features.h 2014-01-05 
22:57:15.000000000 +0100
+++ new/link-grammar-4.8.6/link-grammar/link-features.h 2014-01-13 
17:43:05.000000000 +0100
@@ -30,8 +30,8 @@
 
 #define LINK_MAJOR_VERSION 4
 #define LINK_MINOR_VERSION 8
-#define LINK_MICRO_VERSION 5
+#define LINK_MICRO_VERSION 6
 
-#define LINK_VERSION_STRING "4.8.5"
+#define LINK_VERSION_STRING "4.8.6"
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar/print.c 
new/link-grammar-4.8.6/link-grammar/print.c
--- old/link-grammar-4.8.5/link-grammar/print.c 2014-01-05 21:40:54.000000000 
+0100
+++ new/link-grammar-4.8.6/link-grammar/print.c 2014-02-02 20:14:02.000000000 
+0100
@@ -27,18 +27,18 @@
 #define LEFT_WALL_DISPLAY  ("LEFT-WALL")   /* the string to use to show the 
wall */
 #define LEFT_WALL_SUPPRESS ("Wd") /* If this connector is used on the wall, */
                                   /* then suppress the display of the wall. */
-#define RIGHT_WALL_DISPLAY  ("RIGHT-WALL")   /* the string to use to show the 
wall */
+#define RIGHT_WALL_DISPLAY  ("RIGHT-WALL") /* the string to use to show the 
wall */
 #define RIGHT_WALL_SUPPRESS ("RW") /* If this connector is used on the wall, */
 
 /* The Russian dictionary makes use of the empty word to deal with
  * the splitting of words into variable-length word-counts */
-#define EMPTY_WORD ("=.zzz") /* pure whitespace */
+#define EMPTY_WORD ("=.zzz")   /* pure whitespace */
 #define EMPTY_WORD_SUPPRESS ("ZZZ") /* link to pure whitespace */
 
-#define SUFFIX_WORD ("=")  /* suffixes start with this */
-#define SUFFIX_WORD_L 1     /* length of above */
+#define SUFFIX_WORD ("=")      /* suffixes start with this */
+#define SUFFIX_WORD_L 1        /* length of above */
 #define SUFFIX_SUPPRESS ("LL") /* suffix links start with this */
-#define SUFFIX_SUPPRESS_L 2  /* length of above */
+#define SUFFIX_SUPPRESS_L 2    /* length of above */
 
 #define HIDE_SUFFIX   (!display_suffixes)
 
@@ -47,11 +47,35 @@
  * 1) Valid English constructions like "I think that 2 + 2 = 4" display
  *    bizarrely.  This needs fixing.
  * 2) Engish sentences like "this is a hey= =.zzz test" display
- *    unexpectely. (because the suffixes were contracted.
- * In breif, the mechanism should be disabled for English.
+ *    unexpectely. (because the suffixes were contracted!)
+ * In brief, the mechanism should be disabled for English.
  */
 
-static void set_centers(const Linkage linkage, int center[], Boolean 
print_word_0, int N_words_to_print)
+/**
+ * Return TRUE if the word is a suffix.
+ *
+ * Suffixes have the form =asdf.asdf and "null" suffixes have the form =.asdf.
+ * Ordinary equals signs appearing in regular text are either = or =[!].
+ * In the English dict, equals signs appear as =.v and =.eq and are handled
+ * specially below. This works only because these do not appear in the
+ * Russian dict.  It will get nastier as more languages are added.
+ * This is a bit of a mess, but I can't think of a better way ...
+ * Perhaps a different character, perhaps some obscure UTF-8 marker?
+ * At this time, suffixes are used only in the Russian dicts.
+ */
+static Boolean is_suffix(const char* w)
+{
+       if (0 != strncmp(SUFFIX_WORD, w, SUFFIX_WORD_L)) return FALSE;
+       if (1 == strlen(w)) return FALSE;
+       if (0 == strcmp("=[!]", w)) return FALSE;
+       if (0 == strcmp("=.v", w)) return FALSE;
+       if (0 == strcmp("=.eq", w)) return FALSE;
+       return TRUE;
+}
+
+static void 
+set_centers(const Linkage linkage, int center[],
+            Boolean print_word_0, int N_words_to_print)
 {
        int i, len, tot;
        Boolean display_suffixes = linkage->opts->display_suffixes;
@@ -60,9 +84,8 @@
        if (print_word_0) i=0; else i=1;
        for (; i < N_words_to_print; i++)
        {
-               /* Ignore suffixes */
-               if (HIDE_SUFFIX &&
-                   0 == strncmp (SUFFIX_WORD, linkage->word[i], SUFFIX_WORD_L))
+               /* Ignore suffixes. */
+               if (HIDE_SUFFIX && is_suffix(linkage->word[i]))
                {
                        center[i] = tot;
                        tot++;  // hack alert -- a trailing blank gets printed 
anyway ...
@@ -430,11 +453,10 @@
                                t = string_set_add("", sent->string_set);
                        }
 
-                       /* Concatenate the stem and the sufix together into one 
word */
+                       /* Concatenate the stem and the suffix together into 
one word */
                        if (HIDE_SUFFIX)
                        {
-                               if (0 == strncmp(t, SUFFIX_WORD, SUFFIX_WORD_L) 
&&
-                                  pi->chosen_disjuncts[i-1])
+                               if (is_suffix(t) && pi->chosen_disjuncts[i-1])
                                {
                                        const char * stem = 
pi->chosen_disjuncts[i-1]->string;
                                        size_t len = strlen(stem) + strlen (t);
@@ -458,8 +480,7 @@
                                    (pi->chosen_disjuncts[i+1]))
                                {
                                        const char * next = 
pi->chosen_disjuncts[i+1]->string;
-                                       if (0 == strncmp(next, SUFFIX_WORD, 
SUFFIX_WORD_L) &&
-                                           0 != strcmp(next, EMPTY_WORD))
+                                       if (is_suffix(next) && 0 != 
strcmp(next, EMPTY_WORD))
                                        {
                                                t = string_set_add("", 
sent->string_set);
                                        }
@@ -516,9 +537,9 @@
        char connector[MAX_TOKEN_LENGTH];
        unsigned int line_len, link_length;
 #ifdef USE_FAT_LINKAGES
-       Sublinkage *sublinkage=&(linkage->sublinkage[linkage->current]);
+       Sublinkage *sublinkage = &(linkage->sublinkage[linkage->current]);
 #else
-       Sublinkage *sublinkage=&(linkage->sublinkage);
+       Sublinkage *sublinkage = &(linkage->sublinkage);
 #endif /* USE_FAT_LINKAGES */
        unsigned int N_links = sublinkage->num_links;
        Link **ppla = sublinkage->link;
@@ -546,7 +567,7 @@
                {
                        for (j=0; j<N_links; j++)
                        {
-                               if ((ppla[j]->l == 0))
+                               if (0 == ppla[j]->l)
                                {
                                        if (ppla[j]->r == linkage->num_words-1) 
continue;
                                        N_wall_connectors ++;
@@ -667,17 +688,17 @@
                        if (opts->display_link_subscripts)
                                k = strlen(connector);
                        else
-                               for (t=connector; isupper((int)*t); t++) k++; 
/* uppercase len of conn*/
+                               for (t = connector; isupper((int)*t); t++) k++; 
/* uppercase len of conn*/
                        if ((cl+cr-k)/2 + 1 <= cl) {
                                t = picture[row] + cl + 1;
                        } else {
-                               t = picture[row] + (cl+cr-k)/2 + 1;
+                               t = picture[row] + (cl + cr + 2 - k)/2;
                        }
                        s = connector;
                        if (opts->display_link_subscripts)
-                               while((*s != '\0') && (*t == '-')) *t++ = *s++; 
+                               while ((*s != '\0') && (*t == '-')) *t++ = 
*s++; 
                        else
-                               while(isupper((int)*s) && (*t == '-')) *t++ = 
*s++; 
+                               while (isupper((int)*s) && (*t == '-')) *t++ = 
*s++; 
 
                        /* now put in the | below this one, where needed */
                        for (k=0; k<row; k++) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar/structures.h 
new/link-grammar-4.8.6/link-grammar/structures.h
--- old/link-grammar-4.8.5/link-grammar/structures.h    2014-01-05 
22:06:22.000000000 +0100
+++ new/link-grammar-4.8.6/link-grammar/structures.h    2014-02-02 
17:34:40.000000000 +0100
@@ -121,7 +121,6 @@
 /* MAX_WORD is large, because unicode entries can use a lot of space */
 #define MAX_WORD 180          /* maximum number of bytes in a word */
 #define MAX_LINE 2500         /* maximum number of chars in a sentence */
-#define MAX_DISJUNCT_COST 10000
 
 /* conditional compiling flags */
 #define INFIX_NOTATION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar/tokenize.c 
new/link-grammar-4.8.6/link-grammar/tokenize.c
--- old/link-grammar-4.8.5/link-grammar/tokenize.c      2013-12-22 
04:47:22.000000000 +0100
+++ new/link-grammar-4.8.6/link-grammar/tokenize.c      2014-02-02 
20:13:47.000000000 +0100
@@ -132,6 +132,18 @@
        /* 0xc2 0xa0 is U+00A0, c2 a0, NO-BREAK SPACE */
        /* For some reason, iswspace doesn't get this */
        if (0xa0 == wc) return TRUE;
+
+       /* iswspace seems to use somewhat different rules than what we want,
+        * so over-ride special cases in the U+2000 to U+206F range.
+        * Caution: this potentially screws with arabic, and right-to-left
+        * languages.
+        */
+/***  later, not now ..
+       if (0x2000 <= wc && wc <= 0x200f) return TRUE;
+       if (0x2028 <= wc && wc <= 0x202f) return TRUE;
+       if (0x205f <= wc && wc <= 0x206f) return TRUE;
+***/
+
        return FALSE;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar/utilities.c 
new/link-grammar-4.8.6/link-grammar/utilities.c
--- old/link-grammar-4.8.5/link-grammar/utilities.c     2014-01-05 
21:42:06.000000000 +0100
+++ new/link-grammar-4.8.6/link-grammar/utilities.c     2014-01-11 
02:10:55.000000000 +0100
@@ -236,6 +236,7 @@
 #if __APPLE__
 /* Junk, to keep the Mac OSX linker happy, because this is listed in
  * the link-grammar.def symbol export file.  */
+void lg_mbrtowc();
 void lg_mbrtowc() {}
 #endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar/utilities.h 
new/link-grammar-4.8.6/link-grammar/utilities.h
--- old/link-grammar-4.8.5/link-grammar/utilities.h     2014-01-03 
21:18:24.000000000 +0100
+++ new/link-grammar-4.8.6/link-grammar/utilities.h     2014-01-22 
04:04:06.000000000 +0100
@@ -159,6 +159,10 @@
     }                                                             \
 }
 
+#if defined(__UCLIBC__)
+#define fmaxf(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
 #if !defined(MIN)
 #define MIN(X,Y)  ( ((X) < (Y)) ? (X) : (Y))
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-grammar.spec 
new/link-grammar-4.8.6/link-grammar.spec
--- old/link-grammar-4.8.5/link-grammar.spec    2014-01-05 22:57:15.000000000 
+0100
+++ new/link-grammar-4.8.6/link-grammar.spec    2014-01-13 17:43:05.000000000 
+0100
@@ -1,5 +1,5 @@
 %define name link-grammar
-%define version 4.8.5
+%define version 4.8.6
 %define release 1
 
 Summary: A Natural Language Parser based on Link Grammar Theory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/link-grammar-4.8.5/link-parser/link-parser.c 
new/link-grammar-4.8.6/link-parser/link-parser.c
--- old/link-grammar-4.8.5/link-parser/link-parser.c    2013-10-21 
21:34:42.000000000 +0200
+++ new/link-grammar-4.8.6/link-parser/link-parser.c    2014-02-02 
21:21:15.000000000 +0100
@@ -850,7 +850,7 @@
                                continue;
                        }
 #if 0
-                       /* Try again, this time ommitting the requirement for
+                       /* Try again, this time omitting the requirement for
                         * definite articles, etc. This should allow for the 
parsing
                         * of newspaper headlines and other clipped speech.
                         *

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to