summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2020-09-25 09:20:53 +0800
committerPeng Wu <alexepico@gmail.com>2020-09-25 09:20:53 +0800
commitdf0c1ab351127618b0016b06803ca1a5fb2a65ca (patch)
tree394a467fac1cf5cde268e58257333105c36a8d20
parent0492fc31565ebd35f6ac14769203bdce752f8d7a (diff)
downloadibus-libpinyin-df0c1ab351127618b0016b06803ca1a5fb2a65ca.tar.gz
Add another cloud input source
-rw-r--r--src/PYConfig.h1
-rw-r--r--src/PYPCloudCandidates.cc57
2 files changed, 37 insertions, 21 deletions
diff --git a/src/PYConfig.h b/src/PYConfig.h
index 315f646..55518ba 100644
--- a/src/PYConfig.h
+++ b/src/PYConfig.h
@@ -41,6 +41,7 @@ typedef enum {
enum CloudInputSource{
CLOUD_INPUT_SOURCE_BAIDU = 0,
CLOUD_INPUT_SOURCE_GOOGLE,
+ CLOUD_INPUT_SOURCE_GOOGLE_CN,
CLOUD_INPUT_SOURCE_UNKNOWN
};
diff --git a/src/PYPCloudCandidates.cc b/src/PYPCloudCandidates.cc
index 43d9c32..a528b56 100644
--- a/src/PYPCloudCandidates.cc
+++ b/src/PYPCloudCandidates.cc
@@ -58,7 +58,9 @@ typedef struct
class CloudCandidatesResponseParser
{
public:
- CloudCandidatesResponseParser () {}
+ CloudCandidatesResponseParser (guint input_source) :
+ m_input_source (input_source) {}
+
virtual ~CloudCandidatesResponseParser () {}
virtual gchar *getRequestString (const gchar *pinyin, gint number) = 0;
@@ -69,13 +71,25 @@ public:
protected:
std::vector<std::string> m_candidates;
+ const guint m_input_source;
};
class CloudCandidatesResponseJsonParser : public CloudCandidatesResponseParser
{
public:
- CloudCandidatesResponseJsonParser ();
- virtual ~CloudCandidatesResponseJsonParser ();
+ CloudCandidatesResponseJsonParser (guint input_source) :
+ CloudCandidatesResponseParser (input_source)
+ {
+ m_parser = json_parser_new ();
+ }
+
+ virtual ~CloudCandidatesResponseJsonParser () {
+ /* free json parser object if necessary */
+ if (m_parser) {
+ g_object_unref (m_parser);
+ m_parser = NULL;
+ }
+ }
guint parse (GInputStream *stream)
{
@@ -183,12 +197,21 @@ protected:
public:
gchar *getRequestString (const gchar *pinyin, gint number) {
- const char *GOOGLE_URL_TEMPLATE = "https://www.google.com/inputtools/request?ime=pinyin&text=%s&num=%d";
+ assert (m_input_source == CLOUD_INPUT_SOURCE_GOOGLE ||
+ m_input_source == CLOUD_INPUT_SOURCE_GOOGLE_CN);
+
+ const char *GOOGLE_URL_TEMPLATE = NULL;
+
+ if (m_input_source == CLOUD_INPUT_SOURCE_GOOGLE)
+ GOOGLE_URL_TEMPLATE = "https://www.google.com/inputtools/request?ime=pinyin&text=%s&num=%d";
+ else if (m_input_source == CLOUD_INPUT_SOURCE_GOOGLE_CN)
+ GOOGLE_URL_TEMPLATE = "https://www.google.cn/inputtools/request?ime=pinyin&text=%s&num=%d";
+
return g_strdup_printf (GOOGLE_URL_TEMPLATE, pinyin, number);
}
public:
- GoogleCloudCandidatesResponseJsonParser () : CloudCandidatesResponseJsonParser () {}
+ GoogleCloudCandidatesResponseJsonParser (guint input_source) : CloudCandidatesResponseJsonParser (input_source) {}
};
class BaiduCloudCandidatesResponseJsonParser : public CloudCandidatesResponseJsonParser
@@ -282,12 +305,15 @@ private:
public:
gchar *getRequestString (const gchar *pinyin, gint number) {
+ assert (m_input_source == CLOUD_INPUT_SOURCE_BAIDU);
+
const char *BAIDU_URL_TEMPLATE = "http://olime.baidu.com/py?input=%s&inputtype=py&bg=0&ed=%d&result=hanzi&resultcoding=utf-8&ch_en=1&clientinfo=web&version=1";
+
return g_strdup_printf (BAIDU_URL_TEMPLATE, pinyin, number);
}
public:
- BaiduCloudCandidatesResponseJsonParser () : CloudCandidatesResponseJsonParser () {}
+ BaiduCloudCandidatesResponseJsonParser (guint input_source) : CloudCandidatesResponseJsonParser (input_source) {}
};
gboolean
@@ -372,9 +398,10 @@ CloudCandidates::resetCloudResponseParser ()
m_input_source = input_source;
if (input_source == CLOUD_INPUT_SOURCE_BAIDU)
- m_parser = new BaiduCloudCandidatesResponseJsonParser;
- else if (input_source == CLOUD_INPUT_SOURCE_GOOGLE)
- m_parser = new GoogleCloudCandidatesResponseJsonParser;
+ m_parser = new BaiduCloudCandidatesResponseJsonParser (input_source);
+ else if (input_source == CLOUD_INPUT_SOURCE_GOOGLE ||
+ input_source == CLOUD_INPUT_SOURCE_GOOGLE_CN)
+ m_parser = new GoogleCloudCandidatesResponseJsonParser (input_source);
}
gboolean
@@ -636,15 +663,3 @@ CloudCandidates::getFullPinyin ()
return buffer;
}
-
-CloudCandidatesResponseJsonParser::CloudCandidatesResponseJsonParser () : m_parser (NULL)
-{
- m_parser = json_parser_new ();
-}
-
-CloudCandidatesResponseJsonParser::~CloudCandidatesResponseJsonParser ()
-{
- /* free json parser object if necessary */
- if (m_parser)
- g_object_unref (m_parser);
-}