| Index: third_party/sqlite/src/ext/fts3/fts3_porter.c
|
| diff --git a/third_party/sqlite/src/ext/fts3/fts3_porter.c b/third_party/sqlite/src/ext/fts3/fts3_porter.c
|
| index f7f047c8fcc29a4d1b1337dcdebc65b5b1a49d3e..933602a602b54e35477b5a9e2e250dc1cbcb1afe 100644
|
| --- a/third_party/sqlite/src/ext/fts3/fts3_porter.c
|
| +++ b/third_party/sqlite/src/ext/fts3/fts3_porter.c
|
| @@ -22,9 +22,8 @@
|
| ** * The FTS3 module is being built into the core of
|
| ** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
|
| */
|
| -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
|
| -
|
| #include "fts3Int.h"
|
| +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
|
|
|
| #include <assert.h>
|
| #include <stdlib.h>
|
| @@ -41,7 +40,7 @@ typedef struct porter_tokenizer {
|
| } porter_tokenizer;
|
|
|
| /*
|
| -** Class derived from sqlit3_tokenizer_cursor
|
| +** Class derived from sqlite3_tokenizer_cursor
|
| */
|
| typedef struct porter_tokenizer_cursor {
|
| sqlite3_tokenizer_cursor base;
|
| @@ -404,12 +403,14 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
|
| /* Step 2 */
|
| switch( z[1] ){
|
| case 'a':
|
| - stem(&z, "lanoita", "ate", m_gt_0) ||
|
| - stem(&z, "lanoit", "tion", m_gt_0);
|
| + if( !stem(&z, "lanoita", "ate", m_gt_0) ){
|
| + stem(&z, "lanoit", "tion", m_gt_0);
|
| + }
|
| break;
|
| case 'c':
|
| - stem(&z, "icne", "ence", m_gt_0) ||
|
| - stem(&z, "icna", "ance", m_gt_0);
|
| + if( !stem(&z, "icne", "ence", m_gt_0) ){
|
| + stem(&z, "icna", "ance", m_gt_0);
|
| + }
|
| break;
|
| case 'e':
|
| stem(&z, "rezi", "ize", m_gt_0);
|
| @@ -418,43 +419,54 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
|
| stem(&z, "igol", "log", m_gt_0);
|
| break;
|
| case 'l':
|
| - stem(&z, "ilb", "ble", m_gt_0) ||
|
| - stem(&z, "illa", "al", m_gt_0) ||
|
| - stem(&z, "iltne", "ent", m_gt_0) ||
|
| - stem(&z, "ile", "e", m_gt_0) ||
|
| - stem(&z, "ilsuo", "ous", m_gt_0);
|
| + if( !stem(&z, "ilb", "ble", m_gt_0)
|
| + && !stem(&z, "illa", "al", m_gt_0)
|
| + && !stem(&z, "iltne", "ent", m_gt_0)
|
| + && !stem(&z, "ile", "e", m_gt_0)
|
| + ){
|
| + stem(&z, "ilsuo", "ous", m_gt_0);
|
| + }
|
| break;
|
| case 'o':
|
| - stem(&z, "noitazi", "ize", m_gt_0) ||
|
| - stem(&z, "noita", "ate", m_gt_0) ||
|
| - stem(&z, "rota", "ate", m_gt_0);
|
| + if( !stem(&z, "noitazi", "ize", m_gt_0)
|
| + && !stem(&z, "noita", "ate", m_gt_0)
|
| + ){
|
| + stem(&z, "rota", "ate", m_gt_0);
|
| + }
|
| break;
|
| case 's':
|
| - stem(&z, "msila", "al", m_gt_0) ||
|
| - stem(&z, "ssenevi", "ive", m_gt_0) ||
|
| - stem(&z, "ssenluf", "ful", m_gt_0) ||
|
| - stem(&z, "ssensuo", "ous", m_gt_0);
|
| + if( !stem(&z, "msila", "al", m_gt_0)
|
| + && !stem(&z, "ssenevi", "ive", m_gt_0)
|
| + && !stem(&z, "ssenluf", "ful", m_gt_0)
|
| + ){
|
| + stem(&z, "ssensuo", "ous", m_gt_0);
|
| + }
|
| break;
|
| case 't':
|
| - stem(&z, "itila", "al", m_gt_0) ||
|
| - stem(&z, "itivi", "ive", m_gt_0) ||
|
| - stem(&z, "itilib", "ble", m_gt_0);
|
| + if( !stem(&z, "itila", "al", m_gt_0)
|
| + && !stem(&z, "itivi", "ive", m_gt_0)
|
| + ){
|
| + stem(&z, "itilib", "ble", m_gt_0);
|
| + }
|
| break;
|
| }
|
|
|
| /* Step 3 */
|
| switch( z[0] ){
|
| case 'e':
|
| - stem(&z, "etaci", "ic", m_gt_0) ||
|
| - stem(&z, "evita", "", m_gt_0) ||
|
| - stem(&z, "ezila", "al", m_gt_0);
|
| + if( !stem(&z, "etaci", "ic", m_gt_0)
|
| + && !stem(&z, "evita", "", m_gt_0)
|
| + ){
|
| + stem(&z, "ezila", "al", m_gt_0);
|
| + }
|
| break;
|
| case 'i':
|
| stem(&z, "itici", "ic", m_gt_0);
|
| break;
|
| case 'l':
|
| - stem(&z, "laci", "ic", m_gt_0) ||
|
| - stem(&z, "luf", "", m_gt_0);
|
| + if( !stem(&z, "laci", "ic", m_gt_0) ){
|
| + stem(&z, "luf", "", m_gt_0);
|
| + }
|
| break;
|
| case 's':
|
| stem(&z, "ssen", "", m_gt_0);
|
| @@ -495,9 +507,11 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
|
| z += 3;
|
| }
|
| }else if( z[2]=='e' ){
|
| - stem(&z, "tneme", "", m_gt_1) ||
|
| - stem(&z, "tnem", "", m_gt_1) ||
|
| - stem(&z, "tne", "", m_gt_1);
|
| + if( !stem(&z, "tneme", "", m_gt_1)
|
| + && !stem(&z, "tnem", "", m_gt_1)
|
| + ){
|
| + stem(&z, "tne", "", m_gt_1);
|
| + }
|
| }
|
| }
|
| break;
|
| @@ -516,8 +530,9 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
|
| }
|
| break;
|
| case 't':
|
| - stem(&z, "eta", "", m_gt_1) ||
|
| - stem(&z, "iti", "", m_gt_1);
|
| + if( !stem(&z, "eta", "", m_gt_1) ){
|
| + stem(&z, "iti", "", m_gt_1);
|
| + }
|
| break;
|
| case 'u':
|
| if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){
|
| @@ -631,6 +646,7 @@ static const sqlite3_tokenizer_module porterTokenizerModule = {
|
| porterOpen,
|
| porterClose,
|
| porterNext,
|
| + 0
|
| };
|
|
|
| /*
|
|
|