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 }