[r2691] [patchunicode:#361] によって NUL文字がWCODE::IsCtrlCodeでfalseが返るように変更されてしまったため、 コントロールコードの色分けからNUL文字が除外されているバグを修正します。 WhatKindOfCharでのNULも元のCTRLになるように変更します。
Commit: [r2691] PatchUnicode: #1045 PatchUnicode: #361
grepで調べてみましたが、 gm_keyword_char[0]=CK_NULL -> CK_CTRL に変更しても問題ないので、 NUL文字もテーブル引きで判定するようにしました。
また、配列サイズのチェックについて _countof(gm_keyword_char) を使うようにしました。
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
[r4090]でcommitしました。
Commit: [r4090]
Log in to post a comment.
grepで調べてみましたが、
gm_keyword_char[0]=CK_NULL -> CK_CTRL
に変更しても問題ないので、
NUL文字もテーブル引きで判定するようにしました。
また、配列サイズのチェックについて
_countof(gm_keyword_char)
を使うようにしました。
gm_keyword_char[]を参照している処理を確認しました。
IsControlCode()
IS_KEYWORD_CHAR()
isCSymbol()
CWordParse::WhatKindOfChar()
テスト用コード
実行結果で差分があるところは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
[r4090]でcommitしました。
Related
Commit: [r4090]