File: testencoder.cpp

package info (click to toggle)
libime-jyutping 1.0.16-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,152 kB
  • sloc: cpp: 4,218; makefile: 4; sh: 1
file content (69 lines) | stat: -rw-r--r-- 2,220 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
 * SPDX-FileCopyrightText: 2017~2017 CSSlayer <wengxt@gmail.com>
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 */

#include "libime/jyutping/jyutpingdata.h"
#include "libime/jyutping/jyutpingencoder.h"
#include <fcitx-utils/log.h>

using namespace libime;
using namespace libime::jyutping;

void dfs(const SegmentGraph &segs) {
    FCITX_ASSERT(segs.checkGraph());

    auto callback = [](const SegmentGraphBase &segs,
                       const std::vector<size_t> &path) {
        size_t s = 0;
        for (auto e : path) {
            std::cout << segs.segment(s, e) << " ";
            s = e;
        }
        std::cout << std::endl;
        return true;
    };

    segs.dfs(callback);
}

int main() {
    std::unordered_set<std::string> seen;
    for (auto &p : getJyutpingMap()) {
        auto jyutping = p.jyutping();
        auto initial = p.initial();
        auto final = p.final();

        if (p.fuzzy()) {
            continue;
        }

        auto fullJyutping = JyutpingEncoder::initialToString(initial) +
                            JyutpingEncoder::finalToString(final);
        // make sure valid item is unique
        auto result = seen.insert(jyutping);
        FCITX_ASSERT(result.second);

        int16_t encode =
            ((static_cast<int16_t>(initial) - JyutpingEncoder::firstInitial) *
             (JyutpingEncoder::lastFinal - JyutpingEncoder::firstFinal + 1)) +
            (static_cast<int16_t>(final) - JyutpingEncoder::firstFinal);
        FCITX_ASSERT(JyutpingEncoder::isValidInitialFinal(initial, final))
            << " " << encode;
        FCITX_ASSERT(fullJyutping == jyutping)
            << " " << fullJyutping << " " << jyutping;
        std::cout << encode << "," << std::endl;
    }

    dfs(JyutpingEncoder::parseUserJyutping("sangwut"));
    dfs(JyutpingEncoder::parseUserJyutping("ngng"));
    dfs(JyutpingEncoder::parseUserJyutping("ngaat"));
    dfs(JyutpingEncoder::parseUserJyutping("ngngaat"));
    dfs(JyutpingEncoder::parseUserJyutping("neizaudaajatgeoi"));
    dfs(JyutpingEncoder::parseUserJyutping("jinhauonjathaa"));
    dfs(JyutpingEncoder::parseUserJyutping("jinha"));
    dfs(JyutpingEncoder::parseUserJyutping("jinhau"));

    return 0;
}