|
でるもんた・いいじまです。
> 秀丸エディタの機能としては、
> ステータスバーの全体の文字数と、
> 範囲選択の文字数があるだけになります。
> 部分編集となると、標準機能にするより、
> 個別の使い方として、マクロで作ったほうがいいかもしれません。
ありがとうございます。その方向で行こうと思います。
> 他には、gettextやgetselectedtextで文字列にしてから、
> プログラム向け各種単位のstrlen wcslen ucs4lenなどがあります。
> UTF-8は無いです。
....
> 地道に計算するか、簡単にするにはいったん
> ファイルに書き出すことだと思いますが、
私自身は hmJre.dll で実装しました。
参考までに、私の実装を添付しておきます。
count_for_UTF8:
// テキストを取得
if ( selecting ) selectall;
$$s = gettext(seltopx, seltopy, selendx, selendy, 1);
//ASCII外の文字をダミーのバイト列に置き換えていく
loaddll "hmjre.dll";
$$s = dllfuncstr("ReplaceRegular",
@"[\u0080-\u07FF]", $$s, 0,"CD" ,2);
$$s = dllfuncstr("ReplaceRegular",
@"[\u0800-\uFFFF]", $$s, 0,"Exx" ,2);
$$s = dllfuncstr("ReplaceRegular",
@"[\u{10000}-\u{10FFFF}]",$$s,0,"Fxxx",2);
// 改行を1バイトと数える場合
$$s = dllfuncstr("ReplaceRegular", @"\r\n?", $$s, 0, @"\n", 2);
##n1 = strlen($$s);
// 改行を2バイトと数える場合
$$s = dllfuncstr("ReplaceRegular", @"\n", $$s, 0, @"\r\n", 2);
##n2 = strlen($$s);
freedll;
// 出力
$$msg = sprintf("選択範囲の長さは、UTF-8 で %d バイトです。", ##n1);
if ( ##n1 != ##n2 )
{
$$msg = $$msg +
sprintf("\nただし、改行を2バイトと数える場合は、" +
"%d バイトになります。", ##n2
);
}
message $$msg;
return;
|
|