libime
shuangpinprofile.h
1 /*
2  * SPDX-FileCopyrightText: 2017-2017 CSSlayer <wengxt@gmail.com>
3  *
4  * SPDX-License-Identifier: LGPL-2.1-or-later
5  */
6 #ifndef _FCITX_LIBIME_PINYIN_SHUANGPINPROFILE_H_
7 #define _FCITX_LIBIME_PINYIN_SHUANGPINPROFILE_H_
8 
9 #include <istream>
10 #include <map>
11 #include <memory>
12 #include <set>
13 #include <string>
14 #include <fcitx-utils/macros.h>
15 #include <libime/pinyin/libimepinyin_export.h>
16 #include <libime/pinyin/pinyincorrectionprofile.h>
17 #include <libime/pinyin/pinyinencoder.h>
18 
19 namespace libime {
20 
21 enum class ShuangpinBuiltinProfile {
22  Ziranma,
23  MS,
24  Ziguang,
25  ABC,
26  Zhongwenzhixing,
27  PinyinJiajia,
28  Xiaohe,
29  GB,
30 };
31 
32 class ShuangpinProfilePrivate;
33 
34 class LIBIMEPINYIN_EXPORT ShuangpinProfile {
35 public:
36  using TableType =
37  std::map<std::string, std::multimap<PinyinSyllable, PinyinFuzzyFlags>>;
38  using ValidInputSetType = std::set<char>;
39  explicit ShuangpinProfile(ShuangpinBuiltinProfile profile);
40  explicit ShuangpinProfile(std::istream &in);
41 
42  explicit ShuangpinProfile(ShuangpinBuiltinProfile profile,
43  const PinyinCorrectionProfile *correctionProfile);
44  explicit ShuangpinProfile(std::istream &in,
45  const PinyinCorrectionProfile *correctionProfile);
46 
47  FCITX_DECLARE_VIRTUAL_DTOR_COPY_AND_MOVE(ShuangpinProfile)
48 
49  const TableType &table() const;
50  const ValidInputSetType &validInput() const;
51  const ValidInputSetType &validInitial() const;
52 
53 private:
54  void buildShuangpinTable();
55  std::unique_ptr<ShuangpinProfilePrivate> d_ptr;
56  FCITX_DECLARE_PRIVATE(ShuangpinProfile);
57 };
58 } // namespace libime
59 
60 #endif // _FCITX_LIBIME_PINYIN_SHUANGPINPROFILE_H_
Class that holds updated Pinyin correction mapping based on correction mapping.