2014年01月23日

Emeditor・文字数カウントマクロ

 この記事も含めて、まとめはこちらLink

 Emeditorで簡単な用途として、文字数のカウントをするマクロを作ってみた。
 字数カウントはプラグインとして標準で付いているけど、それをマクロで、またカーソル行の1行のみカウントできるようなものを作った。

20140123-02.png20140123-01.png
 マクロを実行すると、範囲指定があればその範囲を、無ければカーソル位置の1行(論理行)で文字数をカウントして、下にあるステータスバーに表示する。だから、設定でステータスバーを表示させておく必要がある。
 私の用途としてはTwitter。Emeditorを使って書いている時、1行が140文字以内かチェックしたかったので、このマクロをキーボードショートカットですぐ起動できるようにしている。

// 選択範囲・カーソル行の字数取得

function TextLen() {
CsorX = -1; // 変数宣言
if (document.selection.IsEmpty) { // 範囲指定無ければ
CsorX = document.selection.
GetActivePointX(eePosLogical);
CsorY = document.selection.
GetActivePointY(eePosLogical); // カーソル位置取得
document.selection.SelectLine(); // 1行選択
}
TLen = document.selection.Text // 選択範囲から
.replace(/(\r\n|\n)+$/,"") // 最終改行削除
.replace(/\r\n/g," ") // 改行は1文字
.length; // 文字数取得
if (CsorX >= 0) // CsorXに数値あれば
document.selection.SetActivePoint(eePosLogical ,
CsorX , CsorY , false); // カーソル戻す
return TLen; // 字数を返す
}

if (document.selection.IsEmpty) // 範囲指定の有無
Msg = "カーソル行"; // 範囲無メッセージ
else
Msg = "選択範囲"; // 範囲有メッセージ

status = Msg + ":" + TextLen() + "文字"; // 字数表示
 カウント部をマクロとして汎用できるように、functionの形にしておいた。
 処理としてはまず、最後の改行を文字数としてカウントしないように、Javascriptのreplaceを使って削除。
 また、途中の改行は「\r\n」と2文字のため、1文字にするためにスペースに変換、その後にlengthを使って文字数をカウントしている。

 また、以前書いた、EmEditorからTwitterへの投稿マクロにこれを組み込んだら、送信前に文字数をチェックする事なども可能。

URL短縮対応版

 このマクロ、Twitterの投稿時に140文字以内かチェックするのに使うと書いたが、TwitterはURLが「t.co」で始まる短縮形にされるため、短縮URLにしないと実際に投稿可能な文字数と違ってしまう。
 そこで修正を加えたのがこれ。
// 選択範囲の字数取得

function TextLen() {
CsorX = -1; // 変数宣言
if (document.selection.IsEmpty) { // 範囲指定が無ければ
CsorX = document.selection.
GetActivePointX(eePosLogical);
CsorY = document.selection.
GetActivePointY(eePosLogical); // カーソル位置取得
document.selection.SelectLine(); // 1行選択
}
TLen = document.selection.Text // 選択範囲から
.replace(/(\r\n|\n)+$/,"") // 最終改行削除
.replace(/\r\n/g," "); // 改行は1文字
ULen = TLen; // URL短縮分
TLen = TLen.length; // 文字数取得
ULen = ULen.replace(
/(\S+):\/\/([^:\/]+)(:(\d+))?(\/[^#\s]*)(#(\S+))?/g
,"http://t.co/1234567890") // URL短縮
.length; // 文字数取得
if (CsorX >= 0) // CsorXに数値があれば
document.selection.SetActivePoint(eePosLogical ,
CsorX , CsorY , false); // カーソルを戻す
return {T:TLen , U:ULen}; // 字数を返す
}

if (document.selection.IsEmpty) // 範囲指定が無ければ
Msg = "カーソル行"; // メッセージ
else
Msg = "選択範囲"; // メッセージ

Len = TextLen(); // 字数取得
status = Msg + ":" + Len.T + "文字/URL短:" + Len.U + "文字";
// 字数表示
 このマクロを実行すると、
20140123-03.png
 と、通常とURL短縮の文字数両方を表示する。

 方法としては、Twitterの短縮URLは「http://t.co/」の後に10桁の記号に変換されるので、functionの中にある変数「ULen」で、URLを変換後に文字数を取得するというもの。
 URLの正規表現書式は、Emeditorのヘルプに書かれているもの

EmEditor FAQ: 正規表現例を教えてください。

 これをそのまま使用した。


(2014/12/2 追記)
 改行を1文字として変換していなかったため、表示される文字数が間違っていたのを修正。



タグ:EmEditor

posted by 司隆 at 13:11 | Comment(0) | Computer
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。