6 #ifndef _FCITX_LIBIME_PINYIN_PINYINDICTIONARY_H_ 7 #define _FCITX_LIBIME_PINYIN_PINYINDICTIONARY_H_ 15 #include <string_view> 16 #include <unordered_set> 17 #include <fcitx-utils/flags.h> 18 #include <fcitx-utils/macros.h> 19 #include <libime/core/dictionary.h> 20 #include <libime/core/segmentgraph.h> 21 #include <libime/core/triedictionary.h> 22 #include <libime/pinyin/libimepinyin_export.h> 23 #include <libime/pinyin/pinyinencoder.h> 27 enum class PinyinDictFormat { Text, Binary };
29 class PinyinDictionaryPrivate;
31 using PinyinMatchCallback =
32 std::function<bool(std::string_view, std::string_view, float)>;
34 using PinyinTrie =
typename TrieDictionary::TrieType;
39 enum class PinyinDictFlag {
51 using PinyinDictFlags = fcitx::Flags<PinyinDictFlag>;
62 void load(
size_t idx, std::istream &in, PinyinDictFormat format);
63 void load(
size_t idx,
const char *filename, PinyinDictFormat format);
66 void matchWords(
const char *data,
size_t size,
67 PinyinMatchCallback callback)
const;
69 void matchWordsPrefix(
const char *data,
size_t size,
70 PinyinMatchCallback callback)
const;
72 void save(
size_t idx,
const char *filename, PinyinDictFormat format);
73 void save(
size_t idx, std::ostream &out, PinyinDictFormat format);
75 void addWord(
size_t idx, std::string_view fullPinyin,
76 std::string_view hanzi,
float cost = 0.0F);
77 bool removeWord(
size_t idx, std::string_view fullPinyin,
78 std::string_view hanzi);
79 std::optional<float> lookupWord(
size_t idx, std::string_view fullPinyin,
80 std::string_view hanzi)
const;
82 void setFlags(
size_t idx, PinyinDictFlags flags);
92 static TrieType load(std::istream &in, PinyinDictFormat format);
94 using dictionaryChanged = TrieDictionary::dictionaryChanged;
99 const GraphMatchCallback &callback,
100 const std::unordered_set<const SegmentGraphNode *> &ignore,
101 void *helper)
const override;
104 void loadText(
size_t idx, std::istream &in);
105 void loadBinary(
size_t idx, std::istream &in);
106 void saveText(
size_t idx, std::ostream &out);
108 std::unique_ptr<PinyinDictionaryPrivate> d_ptr;
113 #endif // _FCITX_LIBIME_PINYIN_PINYINDICTIONARY_H_ PinyinDictionary is a set of dictionaries for Pinyin.