-
Notifications
You must be signed in to change notification settings - Fork 567
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
自定義字符集 #59
Comments
嗯,標準字符集(比如gb2312)試驗成功了: diff --git a/src/gear/charset_filter.cc b/src/gear/charset_filter.cc
index edf3a90..b8072dc 100644
--- a/src/gear/charset_filter.cc
+++ b/src/gear/charset_filter.cc
@@ -12,6 +12,7 @@
#include <rime/engine.h>
#include <rime/dict/vocabulary.h>
#include <rime/gear/charset_filter.h>
+#include <boost/locale/encoding.hpp>
namespace rime {
@@ -32,6 +33,15 @@ bool contains_extended_cjk(const string& text)
{
const char *p = text.c_str();
uint32_t ch;
+ string charset = "GB2312";
+
+ try {
+ boost::locale::conv::from_utf(text, charset, boost::locale::conv::method_type::stop);
+ return false;
+ } catch (...){
+ LOG(INFO)<<text<<"not in "<<charset;
+ return true;
+ }
while ((ch = utf8::unchecked::next(p)) != 0) {
if (is_extended_cjk(ch)) { 如果要做的話,yaml的語法怎麼定義呢? |
自定義字符集大概要做一個詞典文件,然後以文件名爲該項配置的值。
@osfans 有沒有覺得現有架構有所欠缺? |
我覺得已經很強大了。 |
switches:
- options: [ utf8, big5, gbk ]
states:
- UTF-8
- BIG5
- GBK
reset: 0
engine:
filters:
- charset_filter@big5
- charset_filter@gbk
big5:
option_name: big5
charset: big5
gbk:
option_name: gbk
charset: gbk 那如果要多個字符集之間切換呢? |
也可以通过 |
突然發現,extended_charset是false起作用,好像不太適合做成switches/options。 |
支持標準字符集, switches:
- options: [ utf8, big5, gbk ]
states:
- UTF-8
- BIG5
- GBK
engine:
filters:
- charset_filter@big5
- charset_filter@gbk 不過 測試程序: https://github.com/osfans/trime/releases/download/v3.0-beta/trime-20151105-charset.apk |
@osfans 嗯。这是当前架构的限制之一。造句应该改为由一个独立翻译器实现,他用的词典也应当可以单独配置。而且,现在只能在所有 translator 合并结果之后加 filter,而不能加到个别 translation 再做合并。这样组合能力就很弱。再比如,也不容易实现反查先简繁转换再反查。加选项来控制实在是一个错误的思路,这些原本应该通过排列组合小组件达成。 |
支持!學習! |
應該再加入測試代碼吧? |
我想自定义2个字符集,一个是gb2312,一个是全集(utf8), switches:
engine: gb2312: 那如果要多個字符集之間切換呢? 没有产生效果。 求@osfans 实例代码。 |
@zaqzrh switches:
- options: [ utf8, gb2312]
states:
- UTF-8
- GB2312
engine:
filters:
- charset_filter@gb2312
translator:
enable_charset_filter: false |
translator: 上面这个"table/enable_charset_filter"中的table是什么意思? |
我寫錯了,那就是translator。可能是你的librime太舊了?或者windows版還要其他庫?我用你的就可以,rong2 UTF可以打出镕,gb2312不能。 |
就是說有兩種charset_filter,
你如果不用第一種,那直接用第二種應該就可以。如果還留着第一個,那兩種會同時起作用。 |
如 rime/home#91 討論,暫時關閉。 |
想使用 charset_filter@gbk + Emoji,该如何配置呢? |
確實有這個問題 |
@osfans 我自力更生吧,提交了一个 PR。 |
两年后,我终于回来填坑了。 #293 已经合并到 master,可以在配置文件使用 |
楼上的错误与我这里说的无关,但我想提醒后来人想要折腾 参见:Issue#335 |
目前只有通過
extended_charset
過濾擴展字符集吧?https://github.com/rime/librime/blob/develop/src/gear/charset_filter.cc#L18
Boost.Locale 庫是否可以過濾gbk、big5等標準字符集?
甚至自定義字符集https://github.com/rime-aca/character_set
The text was updated successfully, but these errors were encountered: