Menu

#1035 WCODE::IsCtrlCode()でNUL文字がfalseになるためコントロールコードとして描画されない

None
closed
nobody
None
5
2016-04-07
2016-03-09
Moca
No

[r2691] [patchunicode:#361] によって
NUL文字がWCODE::IsCtrlCodeでfalseが返るように変更されてしまったため、
コントロールコードの色分けからNUL文字が除外されているバグを修正します。
WhatKindOfCharでのNULも元のCTRLになるように変更します。

1 Attachments

Related

Commit: [r2691]
PatchUnicode: #1045
PatchUnicode: #361

Discussion

  • novice123

    novice123 - 2016-03-18

    grepで調べてみましたが、
    gm_keyword_char[0]=CK_NULL -> CK_CTRL
    に変更しても問題ないので、
    NUL文字もテーブル引きで判定するようにしました。

    また、配列サイズのチェックについて
    _countof(gm_keyword_char)
    を使うようにしました。

     
  • novice123

    novice123 - 2016-04-02

    gm_keyword_char[]を参照している処理を確認しました。
    IsControlCode()
    IS_KEYWORD_CHAR()
    isCSymbol()
    CWordParse::WhatKindOfChar()

    テスト用コード

    void test(void)
    {
        wchar_t c;
        wchar_t str[] = L" ";
    
        assert(_countof(gm_keyword_char) == 128);
    
        for(c = 0; c < _countof(gm_keyword_char) ; c++){
            int ret;
            ret = WCODE::IsControlCode(c) ? 1 : 0;
            MYTRACE(_T("IsControlCode(%d) = %d : "), c, ret );
            ret = IS_KEYWORD_CHAR(c) ? 1 : 0;
            MYTRACE(_T("IS_KEYWORD_CHAR(%d) : "), c, ret );
            ret = isCSymbol(c) ? 1 : 0;
            MYTRACE(_T("isCSymbol(%d) = %d : "), c, ret );
            str[0] = c;
            ret = (ECharKind)CWordParse::WhatKindOfChar( str, 1, 0 );
            MYTRACE(_T("WhatKindOfChar(%d) = %d\n"), c, ret );
        }
    }
    

    実行結果で差分があるところは0のところだけでした。
    変更前
    IsControlCode(0) = 0 : IS_KEYWORD_CHAR(0) : isCSymbol(0) = 0 : WhatKindOfChar(0) = 0
    変更後
    IsControlCode(0) = 1 : IS_KEYWORD_CHAR(0) : isCSymbol(0) = 0 : WhatKindOfChar(0) = 4

     
  • novice123

    novice123 - 2016-04-02

    [r4090]でcommitしました。

     

    Related

    Commit: [r4090]

  • Moca

    Moca - 2016-04-07
    • status: open --> closed
    • Group: -->
     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.