1 // PhoneticService.cpp
2 
3 #include "AutoPhonetic.h"
4 #include "UTF8Utility.h"
5 
PhoneticService(SQLite3 * d,OVService * s)6 PhoneticService::PhoneticService(SQLite3 *d, OVService *s) {
7     db=d;
8     srv=s;
9 }
10 
beep()11 void PhoneticService::beep() {
12     srv->beep();
13 }
14 
codePointCount(const string & s)15 size_t PhoneticService::codePointCount(const string &s) {
16     return UTF8CodePointCount(s);
17 }
18 
19 
fetchBPMFCandidate(PhoneticSyllable & q)20 const CandidateList PhoneticService::fetchBPMFCandidate(PhoneticSyllable &q) {
21     CandidateList l;
22     SQLite3Statement *sth;
23 
24     fprintf(stderr, "queryBPMF codestr=%s, qstr=%s\n", q.code().c_str(),
25             (q.BPMFString()).c_str());
26     if ((q.getConfig()).tonetolerance) {
27         sth=db->prepare("select tsi from tsi where bpmf=?1 group by tsi order by freq desc;");
28         if (sth) sth->bind_text(1, (q.BPMFString()).c_str());
29     }
30     else {
31         sth=db->prepare("select chr from bpmf where bpmf=?1 order by ord;");
32         if (sth) sth->bind_text(1, (q.code()).c_str());
33     }
34     if (!sth) return l;
35 
36     while (sth->step()==SQLITE_ROW) l.push_back(string(sth->column_text(0)));
37     delete sth;
38     return l;
39 }
40 
queryBPMF(PhoneticSyllable & q,string & first)41 size_t PhoneticService::queryBPMF(PhoneticSyllable &q, string& first) {
42     SQLite3Statement *sth;
43 
44     fprintf(stderr, "queryBPMF codestr=%s, qstr=%s\n", q.code().c_str(),
45             (q.BPMFString()).c_str());
46 
47     if ((q.getConfig()).tonetolerance) {
48         sth=db->prepare("select tsi from tsi where bpmf=?1 group by tsi order by freq desc;");
49         if (sth) sth->bind_text(1, (q.BPMFString()).c_str());
50     }
51     else {
52         sth=db->prepare("select chr from bpmf where bpmf=?1 order by ord;");
53         if (sth) sth->bind_text(1, (q.code()).c_str());
54     }
55     if (!sth) return 0;
56 
57     size_t r=0;
58     if (sth->step() != SQLITE_ROW) {
59         first="";
60     }
61     else {
62         first=sth->column_text(0);
63         if (sth->step() == SQLITE_ROW) r=2; else r=1;
64     }
65     delete sth;
66     return r;
67 }
68 
queryBPMF(const string & q,string & first)69 size_t PhoneticService::queryBPMF(const string &q, string& first) {
70     SQLite3Statement *sth;
71 
72     sth=db->prepare("select chr from bpmf where bpmf=?1 order by ord;");
73     if (sth) sth->bind_text(1, q.c_str());
74     if (!sth) return 0;
75 
76     size_t r=0;
77     if (sth->step() != SQLITE_ROW) {
78         first="";
79     }
80     else {
81         first=sth->column_text(0);
82         if (sth->step() == SQLITE_ROW) r=2; else r=1;
83     }
84     delete sth;
85     return r;
86 }