Chris@457: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
Chris@457: 
Chris@457: /*
Chris@457:     Sonic Visualiser
Chris@457:     An audio file viewer and annotation editor.
Chris@457:     Centre for Digital Music, Queen Mary, University of London.
Chris@457:     This file copyright 2008 QMUL.
Chris@457:    
Chris@457:     This program is free software; you can redistribute it and/or
Chris@457:     modify it under the terms of the GNU General Public License as
Chris@457:     published by the Free Software Foundation; either version 2 of the
Chris@457:     License, or (at your option) any later version.  See the file
Chris@457:     COPYING included with this distribution for more information.
Chris@457: */
Chris@457: 
Chris@457: #ifndef _TEXT_MATCHER_H_
Chris@457: #define _TEXT_MATCHER_H_
Chris@457: 
Chris@457: #include <QString>
Chris@457: #include <QStringList>
Chris@457: #include "XmlExportable.h"
Chris@457: 
Chris@457: #include <map>
Chris@457: 
Chris@457: /// A rather eccentric interface for matching texts in differently-scored fields
Chris@457: 
Chris@457: class TextMatcher
Chris@457: {
Chris@457: public:
Chris@457:     TextMatcher();
Chris@457:     virtual ~TextMatcher();
Chris@457:     
Chris@457:     struct Match
Chris@457:     {
Chris@457:         QString key; // This field is not used by TextMatcher
Chris@457:         int score;
Chris@457:         typedef std::map<QString, QString> FragmentMap; // text type -> fragment
Chris@457:         FragmentMap fragments;
Chris@457: 
Chris@457:         Match() : score(0) { }
Chris@457:         Match(const Match &m) :
Chris@457:             key(m.key), score(m.score), fragments(m.fragments) { }
Chris@457: 
Chris@457:         bool operator<(const Match &m) const; // sort by score first
Chris@457:     };
Chris@457: 
Chris@457:     void test(Match &match, // existing match record to be augmented
Chris@457:               QStringList keywords, // search terms
Chris@457:               QString text, // to search within
Chris@457:               QString textType, // key to use for fragment map
Chris@457:               int score); // relative weight for hits within this text type
Chris@457: 
Chris@457: };
Chris@457: 
Chris@457: 
Chris@457: #endif