Ticket #296: scriptindex.cc.spelling.diff

File scriptindex.cc.spelling.diff, 2.8 KB (added by Yevgeny Binder, 16 years ago)
  • scriptindex.cc

    old new  
    9595const char * action_names[] = {
    9696    "bad", "new",
    9797    "boolean", "date", "field", "hash", "index", "indexnopos", "load", "lower",
    98     "truncate", "unhtml", "unique", "value", "weight"
     98    "spell", "truncate", "unhtml", "unique", "value", "weight"
    9999};
    100100
    101101// For debugging:
     
    106106    typedef enum {
    107107        BAD, NEW,
    108108        BOOLEAN, DATE, FIELD, HASH, INDEX, INDEXNOPOS, LOAD, LOWER,
    109         TRUNCATE, UNHTML, UNIQUE, VALUE, WEIGHT
     109        SPELL, TRUNCATE, UNHTML, UNIQUE, VALUE, WEIGHT
    110110    } type;
    111111private:
    112112    type action;
     
    233233                            code = Action::LOAD;
    234234                        }
    235235                        break;
     236                    case 's':
     237                        if (action == "spell") {
     238                            code = Action::SPELL;
     239                        }
     240                        break;
    236241                    case 't':
    237242                        if (action == "truncate") {
    238243                            code = Action::TRUNCATE;
     
    374379            switch (action) {
    375380                case Action::HASH:
    376381                case Action::LOWER:
     382                case Action::SPELL:
    377383                case Action::TRUNCATE:
    378384                case Action::UNHTML:
    379385                    done = false;
     
    429435        Xapian::docid docid = 0;
    430436        map<string, list<string> > fields;
    431437        bool seen_content = false;
     438        bool add_spelling = false;
    432439        while (!line.empty()) {
    433440            // Cope with files from MS Windows (\r\n end of lines).
    434441            // Trim multiple \r characters, since that seems the best way
     
    458465                line.resize(last + 1);
    459466                value += line;
    460467            }
     468            // don't add words to the spelling dictionary by default, so clear this flag if it was set in a previous iteration
     469                add_spelling = false;
     470            if(indexer.set_flags((Xapian::TermGenerator::flags)0, (Xapian::TermGenerator::flags)(~0)) & indexer.FLAG_SPELLING)
     471                indexer.set_flags((Xapian::TermGenerator::flags)0, (Xapian::TermGenerator::flags)(~indexer.FLAG_SPELLING));
    461472
    462473            const vector<Action> &v = index_spec[field];
    463474            string old_value = value;
     
    486497                        }
    487498                        break;
    488499                    case Action::INDEX:
     500                    if(add_spelling)
     501                    {
     502                        indexer.set_database(database);
     503                        indexer.set_flags(indexer.FLAG_SPELLING, (Xapian::TermGenerator::flags)(~indexer.FLAG_SPELLING));
     504                    }
    489505                        indexer.index_text(value,
    490506                                           i->get_num_arg(),
    491507                                           i->get_string_arg());
    492508                        break;
    493509                    case Action::INDEXNOPOS:
     510                    if(add_spelling)
     511                    {
     512                        indexer.set_database(database);
     513                        indexer.set_flags(indexer.FLAG_SPELLING, (Xapian::TermGenerator::flags)(~indexer.FLAG_SPELLING));
     514                    }
    494515                        // No positional information so phrase searching
    495516                        // won't work.  However, the database will use much
    496517                        // less diskspace.
     
    534555                    case Action::TRUNCATE:
    535556                        utf8_truncate(value, i->get_num_arg());
    536557                        break;
     558                    case Action::SPELL:
     559                        add_spelling = true;
     560                        break;
    537561                    case Action::UNHTML: {
    538562                        MyHtmlParser p;
    539563                        try {