请求恢复 ibus-pinyin1.1, 1.2 的全角半角处理,按 空格和 +-*/=%@ 保持英文半角符号

58 views
Skip to first unread message

Jiahua Huang

unread,
Oct 1, 2009, 6:15:57 AM10/1/09
to ibus-user
Huang Peng 好,

在先前的 ibus-pinyin 里边,半角中文、全角标点的状态下,空格和 +-*/=%@ 是半角符号,而其他如,。?“”;:《》等才是全角符号,


然而我升级到 ibus-pinyin-1.2.99 时发现原先这个好用的特性丢失了,
默认中文输入状态即 半角中文、全角标点的状态下,
连空格也一律变成了全角符号。

但是如果切换到半角符号,又变成所有东西都一律半角了,没有 ,。?“”;:《》这些。

然而写中文的时候,空格用的还是半角空格,
+-*/=%@ 多需要的都是半角符号(全角中文下才是全部都全角)
可其他标点 ,。?“”;:《》 这些需要的是全角符号。


现在中文状态下的全角空格这些是在不太舒服呀,


所以先前 ibus-pinyin-1.1,ibus-pinyin-1.2.0 标点符号全角时例外 +-*/=%@ 的做法比如今
ibus-pinyin-1.2.99 的一律全角或一律半角好合适。


能不能请 Huang Peng 恢复到先前 ibus-pinyin 的全角半角处理呢?


谢谢

我自己先用这个修改

diff --git a/src/PinyinEngine.cc b/src/PinyinEngine.cc
index 3c344c0..dba05ab 100644
--- a/src/PinyinEngine.cc
+++ b/src/PinyinEngine.cc
@@ -308,6 +308,16 @@ PinyinEngine::processPunct (guint keyval, guint
keycode, guint modifiers)
commit (m_quote ? "‘" : "’");
m_quote = !m_quote;
break;
+ case ' ':
+ case '+':
+ case '-':
+ case '*':
+ case '/':
+ case '=':
+ case '%':
+ case '@':
+ commit (keyval);
+ break;
default:
commit (HalfFullConverter::toFull (keyval));
break;


这会在半角中文、全角标点的状态下,空格和 +-*/=%@ 是半角符号,而其他如,。?“”;:《》等才是全角符号,

在全角中文下则全部全角符号。

Jiahua Huang

unread,
Oct 1, 2009, 6:16:46 AM10/1/09
to ibus-user
现在的补丁

2009/10/1 Jiahua Huang <jhuang...@gmail.com>:

ibus-pinyin-half_puncts.patch

Peng Huang

unread,
Oct 1, 2009, 6:38:54 AM10/1/09
to ibus...@googlegroups.com
你好,

全角空格的问题已经在20091001的tarball里改过来了,至于+-*/=%@怎么处理,我觉得还是需要好好考虑一下,看看是和字母的全角半角一致,还是应该和标点符号一致。也需要看看其他流行的输入法是怎么处理的。


2009/10/1 Jiahua Huang <jhuang...@gmail.com>

Jiahua Huang

unread,
Oct 1, 2009, 7:17:15 AM10/1/09
to ibus...@googlegroups.com
谢谢 Peng Huang,
中秋快乐~

这是恢复,而不是增加新特性呀,

fcitx 、1.2.99 以前版本的 ibus-pinyin,
以及搜狗等 windows 输入法,都是跟字母的半角一致的呀。


而 scim 那样跟标点符号一致,就逼迫不少 scim 用户为了不要全角标点,而干脆一律半角符号,
使得出现了不少中文里用 . , 代替 。,
用 << >> 作为书名号的恶劣中文用法问题

谢谢

2009/10/1 Peng Huang <shawn....@gmail.com>:
> 你好,
> 全角空格的问题已经在 20091001 的 tarball 里改过来了,至于 +-*/=%@ 怎么处理,我觉得还是需要好好考虑一下,看看是和字母的全角半角一致,还是应该和标点符号一致。也需要看看其他流行的输入法是怎么处理的。
>

Jiahua Huang

unread,
Oct 1, 2009, 7:40:28 AM10/1/09
to ibus...@googlegroups.com
确认了下,
搜狗是 空格 +-*=%@ 跟字母一致,
即默认中文状态下 +-*=%@ 是半角,

而 / 和 \ 一样是顿号 、

2009/10/1 Jiahua Huang <jhuang...@gmail.com>:

Screenshot-搜狗的 +-*、%@.png
Screenshot-搜狗设置.png

Peng Huang

unread,
Oct 1, 2009, 7:35:44 PM10/1/09
to ibus...@googlegroups.com
你好,
这个问题已经修复了,是按照google拼音的标点规则做的(我的虚拟的winxp上只安装了google拼音),基本上是只有中文里用到的标点符号,最为标点处理,其他的都合字母数字保持一致。相信这个应该比较合理了。:)有时间请测试一下。

规则如下:
        switch (keyval) {
        case '`':
            commit ("·"); return TRUE;
        case '~':
            commit ("~"); return TRUE;
        case '!':
            commit ("!"); return TRUE;
        // case '@':
        // case '#':
        case '$':
            commit ("¥"); return TRUE;
        // case '%':
        case '^':
            commit ("……"); return TRUE;
        // case '&':
        // case '*':
        case '(':
            commit ("("); return TRUE;
        case ')':
            commit (")"); return TRUE;
        // case '-':
        case '_':
            commit ("——"); return TRUE;
        // case '=':
        // case '+':
        case '[':
            commit ("【"); return TRUE;
        case ']':
            commit ("】"); return TRUE;
        case '{':
            commit ("『"); return TRUE;
        case '}':
            commit ("』"); return TRUE;
        case '\\':
            commit ("、"); return TRUE;
        // case '|':
        case ';':
            commit (";"); return TRUE;
        case ':':
            commit (":"); return TRUE;
        case '\'':
            commit (m_quote ? "‘" : "’");
            m_quote = !m_quote;
            return TRUE;
        case '"':
            commit (m_double_quote ? "“" : "”");
            m_double_quote = !m_double_quote;
            return TRUE;
        case ',':
            commit (","); return TRUE;
        case '.':
            if (m_prev_commited_char >= '0' && m_prev_commited_char <= '9')
                commit (keyval);
            else
                commit ("。");
            return TRUE;
        case '<':
            commit ("《"); return TRUE;
        case '>':
            commit ("》"); return TRUE;
        // case '/':
        case '?':
            commit ("?"); return TRUE;
        }

2009/10/1 Jiahua Huang <jhuang...@gmail.com>

Jiahua Huang

unread,
Oct 2, 2009, 1:47:52 AM10/2/09
to ibus...@googlegroups.com
赞 Peng Huang,

这就跟谷歌拼音一致,变成考虑哪些要中文标点,而不是哪些不要全角了,
确实也觉得这样的更加合理 :)

谢谢,
中秋快乐 :)


2009/10/2 Peng Huang <shawn....@gmail.com>:
> 你好,
> 这个问题已经修复了,是按照google拼音的标点规则做的(我的虚拟的winxp上只安装了google拼音),基本上是只有中文里用到的标点符号,作为标点处理,其他的都合字母数字保持一致。相信这个应该比较合理了。:)有时间请测试一下。
> 规则如下:

Jiahua Huang

unread,
Oct 2, 2009, 1:59:42 AM10/2/09
to ibus...@googlegroups.com
咦,

2009/10/2 Peng Huang <shawn....@gmail.com>:


>         case '[':
>             commit ("【"); return TRUE;
>         case ']':
>             commit ("】"); return TRUE;
>         case '{':
>             commit ("『"); return TRUE;
>         case '}':
>             commit ("』"); return TRUE;


在谷歌拼音里边,
'[', ']' 和 '{', ' }' 是输 '【', '】' 和 '『', '』' 的?


在 fcitx 里边,
'[' 是输 '·'
']' 是类似引号输出 '[', ']'
而 '{', ' }' 保持原样


在 搜狗拼音 (我的虚拟 XP 里只有搜狗拼音)里边,
'[', ']' 是输 '【', '】'
而 '{', ' }' 保持原样


嗯,觉得跟谷歌拼音一致挺好,


中秋快乐~

Reply all
Reply to author
Forward
0 new messages