マクロによるマーカー機能の制御について

  1. 皆様、いつもお世話になっております。

    最近、マーカー機能を使い始めたのですが、マクロからこの機能を制御することは可能でしょうか? ざっと過去の投稿を検索したり、マーカー機能の説明を読んだのですが、わかりませんでした。

    もしすでに回答が出ておりましたらすみません。

    やりたいことは、英語学習時の補助として、要注意単語のリストをテキストファイルで別に作っておき、勉強している原文を開いてからマクロを実行すると、リスト内の全単語にマーカーで色が付けられる、 ということです。

    初心者ゆえ、トンチンカンな質問かもしれませんが、コメントいただければ幸いです。よろしくおねがいします。

     |  Takeshi  |  返信
  2. Mery をご愛用いただきありがとうございます。

    マクロを使ってのマーカー機能の制御ですが、現在のところそういった機能はありません。

    英単語のリストを使って色分けするなら [編集モード] を使って強調文字列として色分けするという方法もあります。

    [編集モード] (言語のハイライト機能) はキーワードのエクスポート (ファイル出力) やインポート (ファイルから取り込み) ができるので、単語のリストを強調文字列として一括登録したりもできます。

    いったん、適当な編集モードをエクスポートして、そのファイルを編集してからインポートするとやりやすいです。

    他の方法としては、用途として一時的なものであれば、マクロからマーカーを登録することもできないことはないと思います。

    メニューにある [マーカーに追加/削除] はマクロから呼び出すこともできるので…

    if (!Confirm("はじめにマーカーの [すべて削除] を実行します。\n\n続行しますか?"))
    	Quit();
    // マーカーをすべて削除
    editor.ExecuteCommandByID(2235);
    document.selection.StartOfDocument(false);
    Redraw = false;
    // 無限ループに注意
    while (true) {
    	document.selection.EndOfLine(true);
    	if (document.selection.TextLength != 0)
    		// [マーカーに追加/削除] を実行
    		// すでに登録済みのものは削除になってしまうので注意
    		editor.ExecuteCommandByID(2232);
    	var pos = document.selection.GetActivePos();
    	document.selection.LineDown(false, 1);
    	// 下に移動できなかったら終了
    	if (pos == document.selection.GetActivePos())
    		break;
    	document.selection.StartOfLine(false);
    }
    Redraw = true;

    ↑ こんなマクロを "要注意単語のリスト" (改行区切り) を開いた状態で実行すると、リストの内容を一括でマーカーに登録できると思います。

    上記のマクロは実行すると現在登録中のマーカーを "すべて削除" してから新規登録になるので注意してください。

    あと、これはサンプルなのでバグや不便な点などがあったら適当に直してくださいね。

     |  Kuro  |  返信
  3. > Mery をご愛用いただきありがとうございます。

    > マクロを使ってのマーカー機能の制御ですが、現在のところそういった機能はありません。

    > 英単語のリストを使って色分けするなら [編集モード] を使って強調文字列として色分けするという方法もあります。

    > [編集モード] (言語のハイライト機能) はキーワードのエクスポート (ファイル出力) やインポート (ファイルから取り込み) ができるので、単語のリストを強調文字列として一括登録したりもできます。

    > いったん、適当な編集モードをエクスポートして、そのファイルを編集してからインポートするとやりやすいです。

    > 他の方法としては、用途として一時的なものであれば、マクロからマーカーを登録することもできないことはないと思います。

    > メニューにある [マーカーに追加/削除] はマクロから呼び出すこともできるので…

    > ↑ こんなマクロを "要注意単語のリスト" (改行区切り) を開いた状態で実行すると、リストの内容を一括でマーカーに登録できると思います。

    > 上記のマクロは実行すると現在登録中のマーカーを "すべて削除" してから新規登録になるので注意してください。

    > あと、これはサンプルなのでバグや不便な点などがあったら適当に直してくださいね。

    Kuro 様、おひさしぶりでございます。またたくまにコードまで書いてくださって、ただただ感謝の一言です。

    今、HTML の構文ファイルをエクスポートして、中身を見たところ、なんとなくつかめましたので、構文ファイルの下の方に、要注意単語を1行ずつ羅列してゆく方法でトライしてみます。

    重ねての質問で恐縮ですが、テキストの色区別に関して、構文ファイルのそれらしい記述は

    #Word Color=1

    だけと思えるのですが、実際に HTML ファイルを開くと色とりどりにタグに着色されるのは、いったいどういう仕組みなのでしょうか?

    お時間のある時でけっこうですので、教えていただければ幸いです。

    重ねて御礼申し上げます。

     |  Takeshi  |  返信
  4. > 重ねての質問で恐縮ですが、テキストの色区別に関して、構文ファイルのそれらしい記述は
    >
    > #Word Color=1
    >
    > だけと思えるのですが、実際に HTML ファイルを開くと色とりどりにタグに着色されるのは、いったいどういう仕組みなのでしょうか?
    >
    > お時間のある時でけっこうですので、教えていただければ幸いです。
    >
    > 重ねて御礼申し上げます。

    構文ファイルを見直しておりましたら

    #SpecialSyntax=HTML

    という記述がありました。これが要点でしょうか?

    それともこの記述は、HTML ファイルに対応するためのものでしょうか?

     |  Takeshi  |  返信
  5. > 構文ファイルを見直しておりましたら
    >
    > #SpecialSyntax=HTML
    >
    > という記述がありました。これが要点でしょうか?
    >
    > それともこの記述は、HTML ファイルに対応するためのものでしょうか?

    何度も早とちりの投稿で申し訳ありません。構文ファイルがあれほど長いとは思わず、ずっと下を見ていったら、

    #Word Color=2

    という記述もありました。しかし、これでも Word Color は 1,2 だけですので、まだ完全には理解できておりません。

     |  Takeshi  |  返信
  6. > #SpecialSyntax=HTML
    > という記述がありました。これが要点でしょうか?
    > それともこの記述は、HTML ファイルに対応するためのものでしょうか?

    はい、これは HTML ファイルに対応する場合に特殊な構文を有効にするための記述になりますので、キーワードの登録だけの場合は必要ありません。

    英単語の登録ということでしたら HTML モードではなく Text モードにいくつか適当に強調文字列として単語を登録し、それをエクスポートしてから追記すれば簡単かと思います。

    #Word Color=2 という記述は強調文字列の何番に登録するかを指定するので必要です。(数値は 2 じゃなくても構いません)

    #Word Color の 0 ~ 7 は、[ツール] の [オプション] から [表示] カテゴリの中の [表示項目] の一覧の中にある [強調文字列 (1) ~ (8)] で設定されている色に対応していますので、例えば単語の重要度に応じて数値を変える、といった感じで使えるかと思います。

    #Word Color=0, WholeWord=True, RightSide=False, RightAll=False, MatchCase=False, InsideTag=False, RegEx=False
    apple
    orange
    
    #Word Color=1, WholeWord=True, RightSide=False, RightAll=False, MatchCase=False, InsideTag=False, RegEx=False
    strawberry
    raspberry
    
    #Word Color=2, WholeWord=True, RightSide=False, RightAll=False, MatchCase=False, InsideTag=False, RegEx=False
    kiwi
    grapefruit

    例えば、こんな感じの構文ファイルをインポートすれば、apple と orange は強調文字列 (1) の色、strawberry と raspberry は強調文字列 (2) の色、kiwi と grapefruit は強調文字列 (3) の色、といった感じで登録できます。

     |  Kuro  |  返信
  7. Kuro 様 返信が遅れて申し訳ありませんでした。

    まさにこれぞ! という感じで知りたかったことが判明しました。
    貴重なお時間を割いて、コードまで書いて頂き、本当にありがとうございます。

    > #Word Color の 0 ~ 7 は、[ツール] の [オプション] から [表示] カテゴリの中の [表示項目] の一覧の中にある [強調文字列 (1) ~ (8)] で設定されている色に対応していますので、例えば単語の重要度に応じて数値を変える、といった感じで使えるかと思います。
    >
    > 例えば、こんな感じの構文ファイルをインポートすれば、apple と orange は強調文字列 (1) の色、strawberry と raspberry は強調文字列 (2) の色、kiwi と grapefruit は強調文字列 (3) の色、といった感じで登録できます。

    小生のアタマが悪くてチェックすべき重要単語が多いのと、どれが重要か判別する能力が無いために、すべてを1色で強調表示させております。(泣)

    でも、以前は重たいMS-Word のVBA に同様の処理をさせ、Word 文書を開きながら作業していましたが、これで Mery だけで完結し、サクサクと作業が進むようになりました。

    重ねて御礼申し上げます。今後ともよろしくお願いいたします。

     |  Takeshi  |  返信
  8. ご返信ありがとうございます。うまくいったようで安心しました。

    > 貴重なお時間を割いて、コードまで書いて頂き、本当にありがとうございます。

    いえいえ。コードは興味がわいたので書いてみましたが、普通に編集モードを使うだけで事足りたようですね。

    > でも、以前は重たいMS-Word のVBA に同様の処理をさせ、Word 文書を開きながら作業していましたが、これで Mery だけで完結し、サクサクと作業が進むようになりました。

    おおー、良かったです。VBA が使えるのでしたら Mery のマクロは VBScript でも記述できるので、さらに色々と簡単に使いこなせそうですね。

    こちらこそ今後ともよろしくお願いいたします。

     |  Kuro  |  返信
  9. Kuro 様 おはようございます。返信ありがとうございました。

    > ご返信ありがとうございます。うまくいったようで安心しました。

    > いえいえ。コードは興味がわいたので書いてみましたが、普通に編集モードを使うだけで事足りたようですね。

    > おおー、良かったです。VBA が使えるのでしたら Mery のマクロは VBScript でも記述できるので、さらに色々と簡単に使いこなせそうですね。

    > こちらこそ今後ともよろしくお願いいたします。

    小生最近出来もしないのに、Python を触り始め、WordやExcel におけるVBA並みのことが、Python でも出来る、しかもよりわかりやすいコードで出来ることを知り、またしてもコピペプログラムに走っております。

    Mery をPython のスクリプトで動かすことにはまだ挑戦しておりません。
    こちらも興味津々ですので、折を見て挑戦してみます。

    また、ご迷惑をおかけするかもしれませんが、ご容赦ください。
    今後とも宜しくお願いいたします。

     |  Takeshi  |  返信
  10. こんばんは、ご返信ありがとうございます。

    Python、人気の高い言語ですね~。Mery でも一応 Python のスクリプトを動かすことはできますが、正式サポートじゃないので VBScript や JScript と比べると若干不便な点もあるんですよね。

    そういえば、マクロを使ったマーカー機能の操作ということでコードを書いたりしたのですが、ふと思ったのです…。

    単語の一覧 (改行区切り) のテキストを開いて、[すべて選択] したあとに右クリックで [マーカーに追加/削除] を選択するだけで良かったのではないかと…

    編集モードを使う方法だと単語リストを複数用意して使い分けできるのでそれはそれでアリだと思いますが、マーカー機能だけでもご希望の動作を実現できた気がしてきました。

    こちらこそ、今後ともよろしくお願いいたします。

     |  Kuro  |  返信
  11. Kuro 様 いつもお世話になっております。返信が遅れて申し訳ありません。

    > 単語の一覧 (改行区切り) のテキストを開いて、[すべて選択] したあとに右クリックで [マーカーに追加/削除] を選択するだけで良かったのではないかと…
    >
    > 編集モードを使う方法だと単語リストを複数用意して使い分けできるのでそれはそれでアリだと思いますが、マーカー機能だけでもご希望の動作を実現できた気がしてきました。

    なるほど! この方法も簡便で良さそうですね。試してみます。
    重ねて御礼申し上げます。

     |  Takeshi  |  返信
スポンサーリンク