アンダーラインマーカーと改行につきまして

  1. 気が付いたらラインマーカー機能が追加されており、ますます使い勝手がよくなっていることをうれしく思います。

    新機能の紹介にもありましたように小説を書くのに便利な機能なので、さっそく使わせていただきます。

    そこで一点。確認といいますか要望といいますか、正規表現で下記のものを指定した場合、

    「[\s\S]*?」

    改行をまたいでマーキングさせることは不可能でしょうか。
    会話文をマーキングするとき、どうしても間に改行が入ってしまうのです。
    現状では、改行直前までマーキングされて、改行した後は何もなしとなります。

    某○○Editorのフォーラムで要望を出させていただいた時には却下されてしまったので、結構切実だったりします。
    理由は重くなるからという話でしたが、今どきのPCでも大変なことなのかわからないので、可能ならご検討いただけないでしょうか。

    最後になりますが、よいエディタをありがとうございます。

     |  M.O.  |  返信
  2. 割り込み失礼します。Mery を使わせていただいてるユーザです。

    > 改行をまたいでマーキングさせることは不可能…

    このお答えとご説明は、作者さまをお待ちくださいませ。

    仕様でマーカーは改行を越えない、という前提で…、
    会話文の「と」の間が8行(これ以上増やせない)までなら、
    つぎの正規表現をマーカーに使えば、完全ではないけれど、
    ある程度はできるような気がします。

    (?:(?:「(?<a>[^「」\n]*?)(?:」|$))|(?:^\g<a>」)|(?:(?=(^\g<a>\n){0,6}(^\g<a>」))(^\g<a>$)))

    行ごとに、「開始部分、中間部分、終了部分」を、それぞれに
    一致させるようにしています。
    開始と終了が組になっているかは判定していません。
    また、中間部分、終了部分の行頭空白も含みます。

    お使いの正規表現と入れ替えて、お試しください。

     |  inuuik  |  返信
  3. inuuik様へ

    > (?:(?:「(?<a>[^「」\n]*?)(?:」|$))|(?:^\g<a>」)|(?:(?=(^\g<a>\n){0,6}(^\g<a>」))(^\g<a>$)))

    こちらの正規表現でマーカーが付くことを確認しました。
    かっこの位置を変えたりしているとマーカーが更新されなかったりしますが、十分と感じます。
    もう何をしているのかさっぱりわからない正規表現ですが、とても助かります。

    ちなみに、同じ正規表現を○○Editorで利用したところ、うまくマーカーが付きませんでした。
    鬼雲使っているはずなんですけれどね。

    返信、ありがとうございました。
    これで校正さんの負担も減ることでしょう。

     |  M.O.  |  返信
  4. M.O. さん、はじめまして。

    > かっこの位置を変えたりしているとマーカーが更新されなかったり

    前・中・後を別々に検索しているので、どうしても編集途中は乱れてしまいますね。

    > 鬼雲使っているはずなんですけれどね。

    鬼車正規表現文法は通るとしても、それ以外の挙動はエディタにより様々なので ^^;
    わずかでもお役に立てれば何よりです。

    作者さまより出しゃばりまして失礼しました。

     |  inuuik  |  返信
  5. M.O. さん書き込みありがとうございます。
    inuuik さん、ご対応ありがとうございます。

    ● M.O. さん

    私も趣味で物書きをしたりしたことがありますのでお気持ちはわかります ^^;

    ただ、某世界最速〇〇Editor 様のおっしゃる通り、描画速度が命のテキストエディタにとって行をまたぐことはかなり至難の業であることも事実です。

    Mery の場合ですと 1 行またげるようにすると単純に 1/2 以下の速度になりますし、またげる行が増えるとどんどん遅くなります。その遅延が 1 文字入力するごとに発生する感じですね。

    ちなみに、一般的なテキストエディタ (Mery 以外) の場合ですと内部は行単位で管理されてるものが多いので、行をまたぐとなると内部で行をいったん結合するという処理が発生するので、さらに遅くなると思います。

    今どきの PC なら割とサクサクかもしれませんが、古い PC を見捨てるわけにもいきませんのでw
    (私が愛用している PC、10 年前のモデルですし… ^^;)

    そういうわけで、行をまたぐのは仕様上困難ですが、今後の課題として頂いておきますね。

    ● inuuik さん

    さすがです!

    > このお答えとご説明は、作者さまをお待ちくださいませ。

    ちょうどこの前話してた話題ですね、、、行をまたげない仕様…
    私にできることと言ったら仕様の説明と、無理なんですよーっていう言い訳ぐらいなものなので、、、サポート感謝です ^^

    > 鬼車正規表現文法は通るとしても、それ以外の挙動はエディタにより様々なので ^^;

    正規表現が得意なフレンズにたくさんアドバイス頂きましたので、Mery の正規表現は某世界最速エディタより細かいことできるはずッスw

     |  Kuro  |  返信
  6. Kuro様、返信ありがとうございます

    中々難しい物なのですね。
    会話文だけならコメント機能で代用も出来ますので、現行のマーカー機能でも十分に対応できると思います。

    素晴らしいエディタをありがとうございます。

     |  M.O.  |  返信
  7. M.O. さん、

    作者さまがフリーソフトウェアとして Mery を提供して下さっているという
    だけで、ありがたいので、「なんとかうまく使いこなすのは、それぞの工夫で…」
    とお考えいただけると、モヤモヤが少し軽くなるかもしれません (^^;

    先の正規表現の説明で、会話文の「と」の間が8行、と書きましたが、
    正しくありませんでした。文字数も関係していて長い行だと4行のときも
    あり、逆に短いともっと多いこともありました。

    その境界線はどこなのかはハッキリわかりませんでした。
    行数の制限を入れていたのですが、この挙動ならあまり関係なさそうなので、

    (?:(?:「(?<a>[^「」\n]*?)(?:」|$))|(?:^\g<a>」)|(?:(?=(^\g<a>\n)*?(^\g<a>」))(^\g<a>$)))

    にすると、マーカーそのものの制限にだけ影響されるようになります。
    これ、長めの正規表現ですが、やっていることは
    「[^「」\n]*?」
    に改行が間にある場合を加えているだけで実は単純です (^^)

    Kuro さん

    恐縮です。

    か:「わわわっ」
    サ:「えいっ!」
    か:「食べないでくださいっ!」
    サ:「えっ?
    食べないよー」

    のようなときに話者で色分けできたらよかったんですけど…改行で挫折。

    > 行をまたげない仕様…

    これ具体的にどこに境界線があるのかは門外不出の秘伝ですか?
    単一の条件ではないみたいで、文字数と改行数がどちらも影響するけど、
    強調表示にしても同様で、探してもよくわからんです…。

    まあ、わかったとても回避策はないし ヒ・ミ・ツ でもいいです…

    > アドバイス

    いや、だから、違いますって。下手の横好きですね。失敗だらけ。
    きっと「本物の正規表現の得意なフレンズ」がたくさん舌打ちしてます (^^;;;

    > 某世界最速エディタより細かいことできる…

    これは作者さまの技術と洞察力と寛容と包容力の賜物です <m(__)m>

    追伸: この正規表現のテストをして気付いたので、ご報告

    Mery 2.6.1 で、IME (Microsoft-IME) をオンの状態で、
    ツール - オプション にします。
    文字数、タブの桁数、行数 など、数字のスライダ項目で、
    直接数値を入力しようとフォーカスを移したとき、

    IME が IME キーでオフにできません。
    そのまま入れようとしても、テンキー以外のキーを受け付けません。

    タスクバーの「あ」をクリックすれば IME はオフにできます。
    IME キーが一時的に無効になっているようです。

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

    話者で色分けは面白そうですが、仕様上厳しそう (っていうか無理) ですね… ^^;

    > 行をまたげない仕様…
    > これ具体的にどこに境界線があるのかは門外不出の秘伝ですか?

    仕様では単純に改行 (\n) が出てきたらそこで止めるようにしています。
    リミッターを解除すればどこまででも行をまたげますが、試してみたらめっちゃ重かったですw

    > IME キーが一時的に無効になっているようです。

    数値入力項目では IME を無効にするようにしています。(ご要望があったので)

    テンキーじゃないほうの数字キーすら効かない状態でしょうか?
    私の環境 (Win10 デフォルトの MS-IME) では数字キーとテンキーどちらでも入力可能です。

     |  Kuro  |  返信
  9. M.O. さん

    申し訳ありません。間違いをしてしまいました。

    > 行数の制限を入れていたのですが、この挙動ならあまり関係なさそうなので、
    >
    > (?:(?:「(?<a>[^「」\n]*?)(?:」|$))|(?:^\g<a>」)|(?:(?=(^\g<a>\n)*?(^\g<a>」))(^\g<a>$)))

    2回目のこの正規表現は使わないでください。
    長文テキストでこれを検索してしまうと、長時間の動作でハングに近い状況になってしまいます。
    最初の正規表現にある行数の制限は必要でした。

    M.O. さん、ご質問の場所をお借りしてすみません。

    Kuro さん、ご返信ありがとうございます。

    > リミッターを解除すればどこまででも行をまたげますが、試してみたらめっちゃ重かったですw

    しつこくてご免なさい。これに無理は申しません。

    お尋ねしたかったのは…、

    マーカーの正規表現が、見通すことができるテキストの範囲のことでした。
    つまり、先読みで現在の行より先の内容との一致判定をするとき、検索では文書の終端まで
    探しますが、マーカーや強調表示はそうではなく、ある程度の範囲だけしか正規表現から
    見えないようで、そこから先は一致しないことになっています。

    マーカーで判定される検索対象の(見える範囲の)テキストの大きさを知りたかったのです。

    たとえば、
    (?:(?:^(?<a>[^「」\n]*?)」)|(?:(?=(^\g<a>\n){0,10}(^\g<a>」))(^\g<a>$)))
    これは前方の10行にある閉じカッコ」を条件に、「」を含まない行を探すものです。
    検索では上から順にすべての行に一致します。

    あいうえおあいうえおあいうえおあ
    いうえおあいうえおあいうえおあい
    うえおあいうえおあいうえおあいう
    えおあいうえおあいうえおあいうえ
    おあいうえおあいうえおあいうえお
    あいうえおあいうえおあいうえお」

    ここで実行したマーカーだと、下の行は一致しますが、最初の行はしませんでした。
    この挙動の秘密が知りたいと思ったわけでした。
    お手数をおかけしてすみません。

    > 私の環境 (Win10 デフォルトの MS-IME) では数字キーとテンキーどちらでも入力可能

    Windows 10 Pro (32bit) 1607 14393.1358 で標準の Microsoft-IME を使ってます。

    古典な盲点の「かな入力」です。
    切り替えて「ローマ字入力」ならどちらのキーも受け付けます。

    「かな入力」で IME をオフではなく無効にすると、カナキー・ロックがかかった状態
    のまま、半角になるので、1234567890 が半角カナの ヌフアウエオヤユヨワ となり、数字チェック
    にはじかれます。

    フォームが表示されると、半角/全角 漢字キー で IME をオフにできないので、
    操作で数字を入れるには、

    ○マウスで IME バーをクリックして IME をオフ
    ○Shift+Ctrl+ カタカナ/ひらがな/ローマ字 キー を使って、「ローマ字入力」に切替
    ○テンキーを使う
    などとなります。

    そこで、IME を制御するときに、いずれかをしていただけると、とても助かります。

    A. 無効の前に一時的に「ローマ字入力」に切り替え、有効にした直後に元に戻す
    B. 無効の後にカナキー・ロックを解除する
    C. IME がオンならば、無効ではなくオフにして、最後にオンにする

    釈迦に説法で、たいへんに失礼ながら…ご参考まで
    http://www.papy.in/bbs/delphi/201105/11050013.html
     ■Delphi2009、Win7でImeMode制御が?

    毎度厚かましくて恐縮です。
    同じようなことがポップアップメニューでもありまして… (^^;

    マクロから Track で表示するメニューの表示前後にこの対策をしていただけると、
    メニューの最初の半角文字を入力すると、そのエントリにジャンプする機能が、
    「かな入力」の IME がオンでも使えるようになります。

    いつも本当にありがとうございます。

     |  inuuik  |  返信
  10. ご返信ありがとうございます。

    昨晩、寝ながら夢で「あー、inuuik さんが言ってたのそういうことか」と気づきました ^^;

    > 先読みで現在の行より先の内容との一致判定をするとき

    さすがの洞察力です。

    コレ、改行をまたげるようにしたつもりではなかったのですが、単語が折り返しをまたぐために前方 (下に向けて) に 80 文字だけ読んでます。

    マーカーとか強調文字って基本、単語だと思ったので 80 文字バッファ見とけば大丈夫だろーと適当です ^^;

    逆に、上に向けては折り返しは 1 行分考慮しますが、改行は含めてませんので、

    aaa[\n]
    bbb

    みたいな感じで、正規表現「aaa\nbbb」を用いると、aaa の部分だけが色分けされちゃいますね。
    あと、再描画が走るのは基本的にカレント行なので、前の行から改行をまたいできちゃったりしてもその行にカーソルが行かないと再描画されずに色分けが反映されないことがあるかもです。

    前方へ 80 文字のバッファの部分を増やせばもっと行けますが、1000 文字ぐらいからは目に見えて重くなってしまいます。(1 文字描画するたびに 1000 文字分の前方マッチが走っちゃうので)

    80 文字とか決め打ちじゃなく、次の行の行末までってことで 1 行だけはちゃんと行をまたげます。っていう仕様もアリといえばアリか…

    この辺りは速度を見ながら調整が必要な部分ですが、、、会話文の色分けとか文章レベルでのマーカーは想定してませんでしたので。

    > 古典な盲点の「かな入力」です。

    ワーオ。それは完全に盲点でした。

    どうやら Delphi の不具合のようですが、新しいバージョンの Delphi では修正されているようなのでそっちから修正部分を移植してこようと思います。

    > 釈迦に説法で、たいへんに失礼ながら…ご参考まで

    わざわざありがとうございます。
    この対症療法は昔の Delphi 向けのようなので、新しい環境 (Mery 64 ビット版用) との混在のウチの環境で適用するとややこしくなりそうなので、独自に対策してみます ^^;

    > 同じようなことがポップアップメニューでもありまして… (^^;

    こちらはちょっと厳しそうです。
    マクロから IME オン・オフ、切り替えできないものでしょうか。

    こちらこそ、いつもアドバイスありがとうございます!

     |  Kuro  |  返信
  11. Kuro さん、詳しいご説明をありがとうございました。

    > 寝ながら夢で

    なんというナイトメア……、ほんとに、申し訳ない。うなされるほどとは (--;

    > 単語が折り返しをまたぐために前方 (下に向けて) に 80 文字だけ読んで

    ありがとうございます。経験的に 80 字折り返し表示で、全角だと2行に少し
    欠けるぐらいだなぁ~と思っていたので、いい線いってました。

    「先読み」には Kuro さんが受け取った先読みバッファの意味と、
    正規表現の「先読み」の2つの意味がありましたが、
    今回は後の方が強いニュアンスでした。

    > みたいな感じで、正規表現「aaa\nbbb」を用いると、aaa の部分だけが色分け

    行単位で検索が開始する前提で考えていたので、これはさすがに強引だろうと… ^^;

    正規表現の一致検索の結果文字列は、必ず、1行に収まるようにする、という
    ことはわかっているつもりです。
    でも、正規表現の先読み文法で (?=式) (?!式) は多用します。
    前方のテキストは、一致文字列にはしないけれど、一致判定には使うわけです。
    なので、

    > 再描画が走るのは基本的にカレント行なので、前の行から改行をまたいで…

    はご心配に及ばずです。必ず、再描画の対象になるカレント行、のための判定だけ。

    このときのバッファの内容が短いと、一致文字列よりはるか前方にある文字による
    判定に失敗するのです。

    > 次の行の行末まで

    これはちと厳しい、今回の会話の「」マーカーはほぼ壊滅してしまいます (^^;
    それに、長い行はとんでもなく長いけれど、大丈夫でしょか…

    個人的には、あとちょっとなんだけどな~、という感想なので、速度が優先で、
    もし目立たなければ、マーカーと強調表示を同じ条件で、倍の 160 文字にして
    いただけたら、十分に実用性が増すように思います。
    はっきり遅くなるようなら、現状でいいです。
    さらに3倍の 240 文字までいくと、1文字 4 バイトや 8 バイトになることを
    考えるとかなり重荷かな?…と。

    マーカーと強調表示は、用途が分かれるとしても、表示にかかる制限は共通
    にしておいていただくと、把握しやすいです。

    長さが欲しいのは、Markdown の強調もどきで、※強調※ で文章を囲むから、
    ということもあります。「かな入力」していると、半角の * を全角の文章中
    に入れるのが手間なので、「こめ」で※を打つほうが樂で (^^)

    (?=(?:(?:(?<!※※|[\\\[\]])(※)(?<a>[^\\\n※ \t ])(?<b>(?:(?<c>\1{3,}?)|(?:[^※\\\n])|(?:\\[^\n]))*?)(?<=\g<a>)(?<d>\1(?!※※|[\[\]])))(?:\g<c>|(?:(?<e>[ \t ])\g<d>)|(?:\\[^\n])|(?:[^※\\\n]))*?)+?$)(?<!※※|[\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<!※※|\g<e>)\g<d>

    > ワーオ。それは完全に盲点…

    > どうやら Delphi の不具合…

    どの言語でも、IME 無効だとカナキー・ロックになっちゃうので、Windows の気配りの
    なさだと思いますが…、いずれにせよ、お手数をおかけします。
    どうぞよろしくお願いします。

    > マクロから IME オン・オフ、切り替え…

    これが、なかなかに…悩ましくて。
    IME 制御は、浅そうに見えるけれど、足を入れると動けなくなる沼、なので… (^^;;;

     |  inuuik  |  返信
  12. ご返信ありがとうございます。

    > 欠けるぐらいだなぁ~と思っていたので、いい線いってました。

    さすがですw
    はて、改行またげないはずだけどなぁ、、、またげてるぅぅぅ!と、驚きました ^^;

    > これはちと厳しい、今回の会話の「」マーカーはほぼ壊滅してしまいます (^^;
    > それに、長い行はとんでもなく長いけれど、大丈夫でしょか…

    そうなんですよね。
    やはり、行 (改行も折り返しも) をまたがないのが一番ですが ^^;

    > もし目立たなければ、マーカーと強調表示を同じ条件で、倍の 160 文字にして
    > いただけたら、十分に実用性が増すように思います。

    試してみましたが、画面上の文字数分の倍率がかかってきますので 80 から 160 になるだけでも目に見えて重くなりますね。それがマーカーの数だけ発生するとなると… (;''∀'')

    ということはバッファ 80 文字でもマーカーが増えたらヤバいんじゃないかと思い始めました。

    中途半端に 80 文字とかするより、ばっさり行 (折り返しも) またぎを切り捨てて速度重視にするか、マーカーは単語だよねっていう前提で 20 文字ぐらいで勘弁してもらう方向にしたくなってきました。。。

    > マーカーと強調表示は、用途が分かれるとしても、表示にかかる制限は共通

    そうですね、ここはプログラムも単純化したいので揃えておきたいところです。

    > どの言語でも、IME 無効だとカナキー・ロックになっちゃうので、Windows の気配りの
    > なさだと思いますが…、いずれにせよ、お手数をおかけします。

    IME の仕様が XP 以降で変わったためのようですが、Windows 7 対応の開発環境なので、開発環境が悪いと思います。Delphi はこういうバグがたくさん仕込まれているので楽しいですw

    > IME 制御は、浅そうに見えるけれど、足を入れると動けなくなる沼、なので… (^^;;;
    > (メニューの最初の半角文字を入力すると、そのエントリにジャンプする機能)

    マクロからメニューを呼び出したときのメニューのアクセラレータキーですよね。これは、私の環境 (Win 10 + Mery 2.6.1) で「かな入力モード」で IME オン状態で試してみましたが、普通に反応するようですよ?

     |  Kuro  |  返信
  13. とても手間のかかる試行と検証をしていただき、ありがとうございます。

    > またげてるぅぅぅ!と、驚きました ^^;

    改行は無理で、折り返しだけ、ほんのちょっとだけ… (^^;

    > 80 から 160 になるだけでも目に見えて重く…

    これは私には不幸であります。

    しかし、おっしゃる通り、この大きさが速度に影響するのなら、半分にすれば、5割増
    か2倍ぐらい速くなりそうで、そのほうが大多数のユーザと作者様には幸福ですね。

    > バッファ 80 文字でもマーカーが増えたらヤバいんじゃないかと思い始めました。

    このバッファが、「潜在的な」マーカーによる動作遅延の原因、になることを
    ご心配のご様子なので、目安というか例というか…

    「マーカーの登録された数」と「マーカーが適用される数」のどちらがより問題なの
    かわかりませんが、適用される数については、「全文字マーカー」が全文字数なので
    最大限界のはず、これが最も遅いのなら、ギリギリ限度内ではないかと…。

    また、毎日使っているテキストは約 62 MB で、今日で 全体 1,058,727 行 ですが、
    そこで先の ※強調※ を使っているのは 22,473 件です。これ以外にも設定があり、
    行数なりに動作は遅くなります。とはいえ操作に不自由なほどではありません。

    > 中途半端に 80 文字とかするより、ばっさり行 (折り返しも) またぎを切り捨てて…

    > マーカーは単語だよねっていう前提で 20 文字ぐらいで勘弁してもらう方向に…

    これは私には深刻な不幸であります。

    しかし、…、そのほうが大多数のユーザと作者様には幸福ですね。

    Mery を使い始めてからずっと依存してきた内部仕様に、
    欲張ったために、自分でとどめをさしてしまいました。

    いつかこんな日が来るんじゃないかと思ってました (^^;
    月に代わってお仕置き、とか、天に代わって成敗、とか、…
    不埒な正規表現三昧なので、、、、自業自得です。

    強調表示とマーカーについて、先読みが封じられると、
    会話「」マーカーや全文字マーカーや※強調※表示など、
    これまでの悪行はほとんどすべてボツです。
    さっぱり(笑)

    M.O. さん、ごめんなさい。
    --------------------------------------------------------------------------------
    > マクロからメニューを呼び出したときのメニューのアクセラレータキー

    じつは違います ^^;;

    ○マクロから Track で表示するポップアップメニュー
    ○テキストに右クリックで表示するポップアップメニュー
    (ツール - ポップアップメニューで設定される内容)

    このどちらでも同じ仕組みなのですが、

    ご存知の通り、アクセラレーターキーは、重複しない半角1文字を、
    メニューのテキストに &R などと & に続けて表記するもので、
    その R の1字または Alt+R のキーで、直ちにそれが選択されて
    実行されます。

    これは「かな入力」の IME オンでも影響なく動作しました。

    知られたことながら、状況を明確にするため、少し細かく書きます。

    このアクセラレーターキーに設定された文字が優先しますが、

    メニューの中でこれと重ならない半角の文字が、メニューのテキストに
    先頭から書かれていると、その先頭 1 文字のキーで、そのテキストに
    選択行がジャンプします。(大文字小文字は同一)

    同じ先頭文字を持つメニューのテキストが1つしかなけけば、そのまますぐに
    実行され、複数あると、先頭1文字を押すたびに選択行が循環して移動し、
    Enter を押すと実行となります。

    次のメニューだと C では、必ず一番上の Current がすぐに実行される
    (アクセラレータ &C があるため)

    n 文書のフルパス名 copy
    Current Date() (2011-05-12(Wed) 06:01) (&C)
    Current Date() (2011-05-12(水) 06:01:59)
    Current Date() (12)

    次のメニューだと C では、まず一番上の Current が選択行となり、C を
    押すたびに2番目→3番目→1番目→…の行に選択行が移動、Enter を
    押した行で実行

    n 文書のフルパス名 copy
    Current Date() (2011-05-12(Wed) 06:01)
    Current Date() (2011-05-12(水) 06:01:59)
    Current Date() (12)

    サブメニューの先頭1文字のキーでは、サブメニューが開きます。

    ツール - ポップアップメニューの設定 で マクロ から設定した表示名にも
    F2 で編集して、半角の先頭文字を付加すれば使えます。

    1 カーソル位置のURLをコピー.js
    1 カーソル位置のURLを開く.js

    そしてこのときの問題が…、

    「かな入力」の IME オンで、ポップアップメニューを表示すると、
    カナキー・ロックとなるので、メニューのテキストの先頭文字が、半角カナ
    のものにだけ反応することになってしまい、メニューテキストの英数字に
    ジャンプしないのです。

    ポップアップメニューを表示している間は、IME オフの操作ができないので、
    数字スライダ項目の直接入力と、まったく同じ状況になります。

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

    あれから試行錯誤してみましたが、文字数を増やした場合はやはり満足できる速度はだせなかったです ^^; 某世界最速エディタさんが実装しない理由が身に染みて分かりました。

    > 「マーカーの登録された数」と「マーカーが適用される数」のどちらがより問題

    「マーカーの登録された数」のほうがボトルネックになりますね。その数 × 解析対象の文字数ぶんのマッチが走ることになって非常に効率が悪くなります。

    > 最大限界のはず、これが最も遅いのなら、ギリギリ限度内ではないかと…。

    そうですね。
    こちらでもマーカーを 50 個ぐらい登録して試してみましたが、まだ実用レベルかなと思う速度は出ていました。

    画面上に見えてる文字しか色分け処理は走っていないので、全体の行数が増えてもそれほど影響はないと思います。

    > マーカーは単語だよねっていう前提で 20 文字ぐらいで勘弁してもらう方向に…

    とりあえず、現状の 80 文字のまま保留という方向で…w

    > マクロからメニューを呼び出したときのメニューのアクセラレータキー

    なるほど、把握しました。
    確かに反応しませんが、これは他のアプリでも同様なので Windows 側の問題でしょうね。

    頂いた参考 URL のプログラムを組み込んでみましたがダメですねぇ…、動作しません ( ;∀;)

    IME のバージョンや ATOK、Google 日本語入力の場合との整合性も考えると容易には対策できそうにない問題のようです。

    ちなみに、

    &Current Date() (2011-05-12(Wed) 06:01)
    &Current Date() (2011-05-12(水) 06:01:59)
    &Current Date() (12)

    ↑こんな感じで全部の頭に & を付けるっていうクソリューションじゃだめでしょうか? ^^;

     |  Kuro  |  返信
  15. たいへんにお手間をおかけしてすみません。ご試行ありがとうございます。

    > 「マーカーの登録された数」のほうが…

    この古い環境でどのくらい遅いか、どこまで実用になるか、データを作って試して
    みようと思います。

    > とりあえず、現状の 80 文字のまま保留という方向で…w

    普通の使い方を超えるぐらいの負荷をかけて、どこまでの速度回復が必要か、の様子
    によってバッファの縮小をしてみて下さい。もう観念しましたので…(^^)

    > 確かに反応しませんが、これは他のアプリでも同様なので Windows 側の問題

    IME を無効にする行為の目的を考えてないですよね MS。
    カナキー・ロックを必要とする場合(あるか?)とそうでない場合の割合を
    見誤ってます。

    > 頂いた参考 URL のプログラムを組み込んでみましたがダメです…

    また、さらにお手数をおかけしました。申し訳ないです。

    > IME のバージョンや ATOK、Google 日本語入力の場合との整合性も考えると…

    おっしゃる通り、少し踏み込んだ制御をしようとすると、互換性が厳しいです。

    > &Current Date() (2011-05-12(Wed) 06:01)
    > ↑こんな感じで全部の頭に & を付ける…

    ありがとうございます。採用させていただきます。(^^;;;

    2階層メニュー 751 エントリだったので、たくさんのアクセラレータを
    付けるのをためらってましたが…、
    やってみたら、先頭文字ジャンプと同じ循環の挙動がキレイにできました。
    重複してもメニューでは機能するようになってたんですね。

    正面から対応するのはしんどいとき、速度がいらない場面では、
    こっそり動かすために、数字や英数字のバリデータの手前で、
    ※文字列※
    "ヌフアウエオヤユヨワ"

    "1234567890"

    "チコソシイハキクニマノリモミラセタストカナヒテサンツネルメロレケム゙゚ホヘー、。・ロレケ」゙「"

    "abcdefghijklmnopqrstuvwxyz,./\\;:]@[-^\\<>?_+*}`{"

    の置換をするっていうのも……、、、^^;;

    マーカーは少し大きい数で試します。ありがとうございました。

     |  inuuik  |  返信
  16. こんばんは、ご連絡ありがとうございます。

    > 普通の使い方を超えるぐらいの負荷をかけて、どこまでの速度回復が必要か、の様子
    > によってバッファの縮小をしてみて下さい。もう観念しましたので…(^^)

    検証用データ、受け取りました。ご協力ありがとうございます。
    起動がすごく遅くて悲しくなってしまいますね ^^;

    (私の PC はかなり年代物なので、起動に 2 分ぐらいかかりました)

    色分け速度以前に Delphi のツールバーボタンの生成速度が遅すぎで、しかもそこは手を入れられない部分なのでどうしようもありませんが…。

    正規表現オン (鬼車・鬼雲を使用) と正規表現オフ (自前の検索) でロジックが異なりますが、やはり正規表現オンの場合で画面のスクロールが発生する場面 (画面上の全行の再描画が必要) ではモッサリしてしまいますねー。(文字入力とかのカレント行のみ再描画の時は大丈夫っぽいです)

    最近の PC ならもう少し軽いのかもしれませんが…。

    > やってみたら、先頭文字ジャンプと同じ循環の挙動がキレイにできました。
    > 重複してもメニューでは機能するようになってたんですね。

    良かったです。

    IME 関連の機能は OS ごとに挙動が違うのと、IME の種類ごとに挙動が違うので、サポート OS (Windows XP ~ 10) と、IME、ATOK、Google IME の過去のバージョンの組み合わせをすべて検証する必要があり、できれば触りたくない部分でしたので助かりましたw

    > マーカーは少し大きい数で試します。ありがとうございました。

    頂いたデータは今後、速度の改善などの際に活用させていただきたいと思います。こうやって見ると結構速度が落ちる場面が分かりやすくて、とても助かりそうです。ありがとうございました!

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