Guitar
IncrementalSearch.h
Go to the documentation of this file.
1 #ifndef INCREMENTALSEARCH_H
2 #define INCREMENTALSEARCH_H
3 
4 #include <string>
5 #include <optional>
6 #include <QString>
7 #include <memory>
8 #include "MeCaSearch.h"
9 
10 class QRect;
11 class QPainter;
12 class QStyleOptionViewItem;
13 
15 
17 private:
18  struct M;
19  M *m;
20 public:
23  void init();
24  bool open();
25  void close();
26  std::optional<std::string> queryMigemo(const char *word);
27 
28  static bool migemoEnabled();
29  static std::string migemoDictDir();
30  static std::string migemoDictPath();
31  static bool setupMigemoDict();
32  static void deleteMigemoDict();
33 
34  static IncrementalSearch *instance();
35 
36  static void drawText(QPainter *painter, const QStyleOptionViewItem &opt, QRect r, const QString &text);
37  static void drawText_filted(QPainter *painter, QStyleOptionViewItem const &opt, QRect const &rect, const AbstractIncrementalFilter *filter);
38  static void fillFilteredBG(QPainter *painter, const QRect &rect);
39 };
40 
42 public:
43  struct Part2 {
44  bool match = false;
45  struct {
46  std::string text;
47  int pos;
48  int end;
49  } source;
50  struct {
51  std::string text;
52  int pos;
53  int end;
54  } kana;
55  };
56 
57  struct Result {
58  bool match = false;
59  size_t pos = 0;
60  size_t end = 0;
61  std::vector<Part2> part2;
62  operator bool () const
63  {
64  return match;
65  }
66  };
67 
68  static QString normalizeText(QString s);
69  static int u16ncmp(const ushort *s1, const ushort *s2, int n);
70 
71  virtual ~AbstractIncrementalFilter() = default;
72  virtual bool isEmpty() const = 0;
73  virtual void makeFilter(const QString &filtertext) = 0;
74  virtual Result match(QString const &text) const = 0;
75 
76 };
77 
79 private:
80  QString text_;
81  std::shared_ptr<QRegularExpression> re_;
82 public:
83 public:
84  MigemoFilter() = default;
85  MigemoFilter(const QString &filtertext);
86  bool isEmpty() const override;
87  void makeFilter(const QString &filtertext) override;
88  Result match(QString const &text) const override;
89 };
90 
92 public:
93 private:
94  std::string original_text_;
95  std::string katakana_text_;
96  static std::string to_kana(std::string const &text, std::vector<Part2> *out);
97 public:
98  MeCaFilter() = default;
99  MeCaFilter(QString const &filtertext);
100  bool isEmpty() const override;
101  void makeFilter(QString const &filtertext) override;
102  Result match(QString const &text) const override;
103 };
104 
105 
106 #endif // INCREMENTALSEARCH_H
Definition: IncrementalSearch.h:41
static int u16ncmp(const ushort *s1, const ushort *s2, int n)
Definition: IncrementalSearch.cpp:218
virtual ~AbstractIncrementalFilter()=default
virtual bool isEmpty() const =0
virtual void makeFilter(const QString &filtertext)=0
static QString normalizeText(QString s)
Definition: IncrementalSearch.cpp:249
virtual Result match(QString const &text) const =0
Definition: IncrementalSearch.h:16
bool open()
Definition: IncrementalSearch.cpp:45
void init()
Definition: IncrementalSearch.cpp:40
void close()
Definition: IncrementalSearch.cpp:68
static bool migemoEnabled()
Definition: IncrementalSearch.cpp:94
static void fillFilteredBG(QPainter *painter, const QRect &rect)
Definition: IncrementalSearch.cpp:232
static void drawText(QPainter *painter, const QStyleOptionViewItem &opt, QRect r, const QString &text)
Definition: IncrementalSearch.cpp:237
static std::string migemoDictPath()
Definition: IncrementalSearch.cpp:105
~IncrementalSearch()
Definition: IncrementalSearch.cpp:34
M * m
Definition: IncrementalSearch.h:18
static IncrementalSearch * instance()
Definition: IncrementalSearch.cpp:89
static void deleteMigemoDict()
Definition: IncrementalSearch.cpp:170
static void drawText_filted(QPainter *painter, QStyleOptionViewItem const &opt, QRect const &rect, const AbstractIncrementalFilter *filter)
Definition: IncrementalSearch.cpp:267
IncrementalSearch()
Definition: IncrementalSearch.cpp:29
static bool setupMigemoDict()
Definition: IncrementalSearch.cpp:110
static std::string migemoDictDir()
Definition: IncrementalSearch.cpp:99
std::optional< std::string > queryMigemo(const char *word)
Definition: IncrementalSearch.cpp:76
Definition: IncrementalSearch.h:91
MeCaFilter()=default
Result match(QString const &text) const override
Definition: IncrementalSearch.cpp:333
std::string original_text_
Definition: IncrementalSearch.h:94
void makeFilter(QString const &filtertext) override
Definition: IncrementalSearch.cpp:317
static std::string to_kana(std::string const &text, std::vector< Part2 > *out)
Definition: IncrementalSearch.cpp:296
bool isEmpty() const override
Definition: IncrementalSearch.cpp:328
std::string katakana_text_
Definition: IncrementalSearch.h:95
Definition: IncrementalSearch.h:78
MigemoFilter()=default
QString text_
Definition: IncrementalSearch.h:80
bool isEmpty() const override
Definition: IncrementalSearch.cpp:185
Result match(QString const &text) const override
Definition: IncrementalSearch.cpp:203
void makeFilter(const QString &filtertext) override
Definition: IncrementalSearch.cpp:190
std::shared_ptr< QRegularExpression > re_
Definition: IncrementalSearch.h:81
Definition: IncrementalSearch.h:43
struct AbstractIncrementalFilter::Part2::@9 source
int end
Definition: IncrementalSearch.h:48
bool match
Definition: IncrementalSearch.h:44
int pos
Definition: IncrementalSearch.h:47
struct AbstractIncrementalFilter::Part2::@10 kana
std::string text
Definition: IncrementalSearch.h:46
Definition: IncrementalSearch.h:57
size_t pos
Definition: IncrementalSearch.h:59
size_t end
Definition: IncrementalSearch.h:60
std::vector< Part2 > part2
Definition: IncrementalSearch.h:61
bool match
Definition: IncrementalSearch.h:58
Definition: IncrementalSearch.cpp:24