Mery 2.2.1.4937

春どこ行った!なんだか寒いと思っていたら突然雪が降り、この辺りでは珍しく 10cm ほど積もった。部屋の暖房器具は YAMAZEN の DF-J12 のみだけど、PC と DELL モニタが意外と熱を発生してくれるので助かっている。それゆえ、PC の前に座っている時間が増えたので Mery を更新してみた次第。

更新履歴

  • スペルチェックで次のスペルへ移動時の挙動を修正
  • 矩形置換、矩形選択時の貼り付けの挙動を従来のものに戻した
  • 書き込みバッファ無し排他モードアクセス禁止のファイルの読み込みに対応
  • 鬼車を 5.9.5 に差し替えた

ダウンロード

Mery_2.2.1.4937.zip

* Windows 8, 7, Vista, XP 対応
* Security Essentials (ウイルス対策の定義: 1.165.3721.0) でウイルスチェック済

Comments (33)

  1. 更新ありがとうございます。

    以前OS用のドライブをHDDからSSDに移行した時に気付いたのですが、Meryを移行する際に、
    C:\Users\xxx\AppData\Roaming\Mery 内のMery.ini
    の移行も必要だと知りました。
    zip版のアプリケーションで、iniファイルがzip解凍フォルダ以外に生成されるのは珍しいなぁと。

    理由を聞いてもチンプンカンプンでしょうし、現状に満足してますし。駄文失礼しました。

     |  saku
  2. ● saku さん
    Mery.exe と同じフォルダに Mery.ini を配置すると,ご希望通りのポータブル版の動作をしますよ.
    ただ Program Files 配下に配置されると,Vista 以降では同ディレクトリ内に書き込めないのでこのような仕様になっていたと記憶しています.
    (設定は Users 配下かレジストリというのが Windows の決まりですし)
    なのでポータブル版にする場合は,ユーザ権限で書き込み可能なフォルダに配置する必要があります.
    ちなみに公開されているプラグインや拙作マクロは,ポータブル版であることを検知して設定保存先を切り替えるので安心です.

    個人的には zip 版に ini が含まれると,アップデートで上書きして泣いている自分が思い浮かぶので,今の仕様が嬉しいですね.

     |  ks
  3. ks さんご対応ありがとうございます。

    おっしゃる通り、Vista 以降は AppData 配下に設定を保存するのがお作法になっているためです。
    (XP でも Application Data というフォルダがありましたが、あまり意識されてなかった気がしますね)
    データ移行の際はお手数をおかけしますが、設定ファイルも移動してやってくださいませ。

     |  Kuro
  4. ksさん、kuroさんありがとう御座います。
    >アップデートで上書き
    確かに!

     |  saku
  5. 興味本位ですが,XP の対応ってどうされるのでしょうか?
    テキストエディタですし,セキュリティ問題はそう起きないと思いますが.
    Delphi 自体は XE5 でも XP 対象の実行ファイルが作れるようですね(XE6 はどうなるんだろ)

    ちなみに秀○が 9x 系のバグを直していて驚愕しました.環境まだ用意しているのかと……

     |  ks
  6. そう言われてみればそうですね。4 月で終了でしたか。
    なにげに現役で XP 使って趣味のサーバ立てたりしてますが・・・w

    サポート切れの XP の脆弱性までは対応しきれないと思いますが、一応 XP の環境 (Virtual Box ですが) は手元に置いていますので XP 上での不具合も再現できれば修正していきたいと思います。

    Delphi は XE3 あたりから開発環境の IDE が XP に対応しなくなってたと思いますので、XP で不具合が発生してもデバッグできないという罠がありますね。いずれにせよ高くて手が出ませんが。

    秀○さん、すごすぎ!
    9x 系で動くというのがもうどうにかしてると思いますw

     |  Kuro
  7. あまり、初歩的なことなので、聞きずらいのですが………。
    カナ、数字、漢字などを色分けして使っています。画面は横書きで表示されているのですが、たまたま印刷プレビューを見たところ、印刷が縦書きになっていました。よく見ると全角と半角で違っているようです。何か設定し間違えたのかと探してみましたが、原因が分かりませんでした。印刷をすることはないので、問題にはならないのですが、なぜこうなっているのか教えてくれませんか。

     |  先日から使い始めました
  8. Mery をお使いくださりありがとうございます。

    印刷時のフォントが縦書きフォントになっているのではないでしょうか?
    メニューから「ファイル」→「印刷」をクリックすると印刷設定画面が表示されます。
    「フォント名」の項目が印刷時と印刷プレビューに反映されるフォントです。

    先頭に「@」がついているフォントは縦書きフォントですので、「@」がないフォントを選択してみてください。

     |  Kuro
  9. 指摘のとおりでした。縦書きフォントがあることも知りませんでした。
    ありがとうございました。

     |  先日から使い始めました
  10. 今まで長らく使っていたエディタがさすがに古さを感じたので乗り換えて使わせてもらっています。
    サイズが大きいので重いかなと心配でしたが軽快な動作で2ファイル以上開くならメモリ使用量も少なくさっそく重宝させてもらってます。

    細かい点ですが要望が二点ほどあります。
    1つ目は「編集」で「行の削除」を加えて欲しいです。
    2つ目は開いただけで未編集のファイルは上書き保存を出来ないように(アイコンをグレーに)してもらいたいです。
    いきなり訪問で要望と、失礼かと思いましたがぜひご検討ください。

     |  Natsu
  11. ● Natsu さん
    作者様ではないですが,ご要望の動作についてご提案をば.

    > 1つ目は「編集」で「行の削除」を加えて欲しいです。
    何もキーアサインを変えていなければ,Shift + Delete で行削除になります.多分慣れればこちらの方が便利です.
    メインメニューの変更はできないのですが,ポップアップメニューの変更はできるので,こちらに行削除のマクロを追加すれば右クリックから行削除ができます.
    マクロは「http://www.haijin-boys.com/wiki/%E3%82%AD%E3%83%BC%E3%82%A2%E3%82%B5%E3%82%A4%E3%83%B3%E9%9B%86#.E8.A1.8C.E3.82.92.E5.89.8A.E9.99.A4
    ポップアップメニューの変更は「メニュー - ツール - ポップアップメニューの設定」

    > 2つ目は開いただけで未編集のファイルは上書き保存を出来ないように(アイコンをグレーに)してもらいたいです。
    アイコンはグレーになりませんが,未編集ファイルは上書き保存できないようになっているはずですが……
    Ctrl + S を押しても未編集なら上書き保存してないですし(更新日時が変わらない).
    なおメモ帳始め一般的なアプリと同様に,編集されている場合はタブの表示名末尾に*がついています.

    以上,ご参考まで.

     |  ks
  12. >>ksさん

    返信ありがとうございました。
    1つ目について言葉足らずですいません。
    「編集」に追加して、それでキーボードカスタマイズにて自分でキーを設定できればいいなと思いこの要望を出しました。
    ですがShift + Deleteでこの操作が出来るのは知りませんでした。ありがとうございます。

    2つ目についてですがご指摘のこともですが、よく見たらアイコンもグレー表示になってますね。。。
    早とちりで申し訳ありません。

     |  Natsu
  13. ● Natsu さん
    > 「編集」に追加して、それでキーボードカスタマイズにて自分でキーを設定できればいいなと思いこの要望を出しました。
    マクロを登録してキーカスタマイズで割り当てられるので,そちらで自分用にカスタマイズすると一層使いやすくなりますよ.
    http://www.haijin-boys.com/wiki/%E3%82%AD%E3%83%BC%E3%82%A2%E3%82%B5%E3%82%A4%E3%83%B3%E9%9B%86
    にはそういったマクロを寄せ集めています.
    マクロだと細かい動作も指定できるので,例えば行削除でも改行は消すのか残すのか,といったこともカスタマイズできます.

    # キーアサイン集がいつの間にやらとても充実している.masme さん感謝です.

     |  ks
  14.  Shift + Delete は、正確には「削除」でなく「切り取り」なので、Ctrl + X でも可能ですね。
     Mery では範囲選択してない場合に切り取り/コピーすると、カーソル位置の論理行を切り取り/コピーする仕様になっているので、行削除っぽく使えるという小技です。

     Shift + Delete (切り取り)/Ctrl + Insert (コピー)/Shift + Insert (貼り付け) は、Windows に古くからあるショートカットキーで、Mery でも使えるんですが、キーボード一覧に載ってない上、割り当ててなくても動作するという特殊な扱いになっているようです。Delphi や TNotePad の仕様でしょうか?

    ● ks さん
    > # キーアサイン集がいつの間にやらとても充実している.masme さん感謝です.
     フォーラム・ブログ・掲示板などに散らばっている情報を、公式Wikiで集約・補足しておけば、ユーザーが自力で問題解決したり相互扶助したりする手段が増えて助かると思い、「キーアサイン集」の記事をお借りしました。こちらこそ勝手をしまして恐縮です。

     |  masme
  15. ● ksさん
    重ね重ねありがとうございます。マクロは使ったことはありませんが使いこなせば便利そうなので勉強します。

    ● masmeさん
    >Mery では範囲選択してない場合に切り取り/コピーすると、カーソル位置の論理行を切り取り/コピーする仕様
    またいいことを知りました。基本操作だけでも奥が深いんですね。

     |  Natsu
  16.  はじめまして。
     Markdown記法の文章を、正規表現で色分けしながら書くことに、Meryを使わせていただいております。その際、文中で
     **強調したい**したくない**再びしたい**
    ……というような箇所が全て強調されることに、悩んでいます。『\*\*.*?\*\*』という設定のどこをどう変えれば良いのか、付け焼き刃の知識では思いつきません。
     Twitterでぼやいたところ、偶然それを目にした方が「秀○なら『\*\*[^(\*\*)]+\*\*
    』でいけますよ」と教えてくださったのですが、Meryでは駄目なようです。
     Meryの作者様に正規表現についてお尋ねすることが、筋違いなのは重々承知しております。しかしもしよろしければ、この件の解決策について御教授いただけると幸いです。
    ※Meryの仕様上どうしようもない、というのならば、それはそれで納得いたします。

     |  ドモン
  17. はじめまして。Mery をお使いくださりありがとうございます。

    Markdown ですか、面白そうですね。
    私も時々書く機会がありますが、なかなか良いツールに巡り合わず苦戦しております。
    リアルタイムでプレビューを見たいので Mery は使ってませんが^^;

    さて正規表現ですが、恥ずかしながら私はそんなに詳しくありませんので力になりそうにありませんが…
    確認してみましたところ確かに秀○さんだと色分けされますね。何故これで行けるのか謎ですが、正規表現エンジンの違いでしょうかね。

    Mery でも正規表現さえ作ることができれば可能だとは思うのですが、簡単には行きそうにありません。
    調べてみましたが完璧な回答は見つけられませんでした。

    **強調したい**(半角スペース)したくない(半角スペース)**再びしたい**

    こんな感じで半角スペースで区切りを入れている場合は色分けできる正規表現であれば、外人さんが作っていたものが見つかりました。

    (\*\*)(?=\S)(.+?[*]*)(?<=\S)\1

    難しいですねコレは…

     |  Kuro
  18.  Mery と同じく「鬼車」を採用する Sakura Editor でも \*\*.*?\*\* でドモンさんの期待した結果になるので、Mery 側の実装問題かと思われます。
     自分も正規表現に詳しいわけでなく、ソフトウェア開発経験もないので、推測ですが…… Mery の正規表現検索は、最後のマッチ位置を記憶せず、先頭から1文字ずつ検索する仕様になってるんじゃないでしょうか?

    **ア**イ**ウ** に対し、\*\*.*?\*\* で検索
    ※ | は検索開始位置

    ◆ 秀○/Sakura Editor などの場合(推測)
    1. |**ア**イ**ウ** → **ア** がマッチ
    2. **ア**|イ**ウ**
    3. **ア**イ|**ウ** → **ウ** がマッチ
    4. **ア**イ**ウ**| → 検索終了 ※結果、イ はマッチしない

    ◆ Mery の場合(推測)
    01. |**ア**イ**ウ** → **ア** がマッチ
    02. *|*ア**イ**ウ**
    03. **|ア**イ**ウ**
    04. **ア|**イ**ウ** → **イ** がマッチ
    05. **ア*|*イ**ウ**
    06. **ア**|イ**ウ**
    07. **ア**イ|**ウ** → **ウ** がマッチ
    08. **ア**イ*|*ウ**
    09. **ア**イ**|ウ**
    10. **ア**イ**ウ|**
    11. **ア**イ**ウ*|*
    12. **ア**イ**ウ**| →検索終了

     言葉で上手く説明できる自信がないので上図で察していただけると幸いなのですが(汗)、このような仕組みの違いじゃないかと自分は考えています。

     他のテキストエディタや、正規表現のシミュレーションができる海外サイト「Rex V」などでも確認しましたが、正規表現は最後のマッチ位置から検索を再開するのが標準のようです。
     現行の Mery の仕様が自分の推測どおりなら見直しも考えたほうがいいかもしれません。とはいえ仕様変更となると、これまでの色分けや検索にどう影響するか怖い所ですが……。

     |  masme
  19.  ご返答ありがとうございます。
     Markdown用を謳ったエディターはいずれも、肝心のエディタ部分が今ひとつで常用には耐えられず、色々試しては結局Mery(と、使い馴染み過ぎて移行できなくなっているNami2000)に戻ってきている次第です。プレビューは偶然みつけた[こちら](http://rutto-ysgr.net/)の『InstantMarkdownViewer』に頼っています。

     正規表現につきまして、わざわざ調べていただき恐縮です。
     半角スペースを使うやり方の御教授に、お礼申し上げます。HTML化した際などに半角空白を置換する必要はあるでしょうが、現在の用途においては、ほとんど支障ありません。
     当面は、お教えいただいた方法を使っていこうと思います。

     本当に、ありがとうございました。

     |  ドモン
  20. 普通の検索でも同じようにマッチした文字列の2番目の文字から次のマッチングが始まるっぽいですね。
    正規表現検索では、[上に検索]したときはいい感じ(?)の動きをしてるのに・・・。

     |  Dainty
  21. こんばんは、書き込みありがとうございます。

    ● masme さん

    気になったので私もそれぞれの仕様について調べてみました。

    masme さんのおっしゃる通り、Mery は先頭から 1 文字ずつ検索する仕様になっており、これは想定内の挙動です。

    秀○と Sakura Editor の挙動を調べてみました。
    うーむ、でも文字で説明するのって難しいですね^^;

    Sakura Editor の場合はご推察の通り検索でマッチした箇所の次の文字から検索が始まる感じになっていました。これはこれで正しいと思いますが、**ア**イ**ウ** に対し \*\*.*?\*\* で検索した場合に **イ** が漏れてしまうのは正規表現的に正しくないと思いました。もちろんこっちの方が好みだと思われるユーザさんもいらっしゃると思います。

    次に秀○ですが、こちらは **ア**イ**ウ** に対し \*\*.*?\*\* で検索した場合、F3 で次を検索するときちんと **イ** もヒット (選択状態になる) しますが、検索でヒットしているにも関わらず **イ**  の部分だけ色分けされません。バグなのかもしれませんが、秀○のように有名なソフトですので敢えてそういう仕様にされているのかもしれません。ただ、検索結果とその色分けが異なるというのはあまり好ましいとは思えません。

    Mery の場合は **イ** もヒットした上で色分けもされるので挙動としては正しいと思っています。

    ただ、今回の件の調査の副産物で Mery の不具合を見つけてしまいました(汗)

    「次を検索」で進んでいく場合は 1 文字ずつ検索する想定内の挙動なのですが、「前を検索」で戻る場合になぜか Sakura Editor 方式でマッチした箇所の次の文字から検索する方式になってました。調べてみたところ当時のバージョンで使用していた鬼車 5.5.2 だと 1 文字ずつ戻ることができていたので途中で鬼車の仕様が変わったのかもしれません…ずいぶん昔の話ですが。

    現在のところ Mery の仕様はこのままにしておこうと思いますが「前を検索」だけが Sakura Editor 方式になっているのは問題ありなので修正しておこうと思います。

    ● ドモン さん

    お役に立てずすみません。
    InstantMarkdownViewer、シンプルでかなり良い感じですね。これは常用できそうです!

    BOM 無しの UTF8 が文字化けするのと、本来であればソースを保存したタイミングでプレビューに反映されるのだと思うのですが、ファイルにアクセスできませんっていうエラーが出て強制終了します、環境の問題かな、残念…

     |  Kuro
  22. Markdown 強調 ( Mery エディタ 鬼車 正規表現)

    表示 - 編集モード - 編集モードの設定 - text - プロパティ - 強調 - 強調文字列

    動作仕様
      *   <em>
      **  <string>
      *** <em><strong>
      _   <em>
      __  <string>
      ___ <em><strong>

      1行の中で後ろから前に向かって組の対応を判定

      _abc_def_ 開始アンダースコアの前が空白でないとリテラル扱い
      )*abc*    開始アスタリスクの前が閉じ括弧だとリテラル扱い
      * a *  開始の直後、終了の直前が空白ならリテラル扱い
      _ a _  開始の直後、終了の直前が空白ならリテラル扱い
            (仕様の、空白に囲まれ、でなく内側のみ判定)
      \*     \ エスケープはリテラル扱い
      \_     \ エスケープはリテラル扱い
      ****   4字以上の連続はリテラル扱い
      ____   4字以上の連続はリテラル扱い

    ○1文字  *   <em>
    (?=(?:(?:(?<![*\\)])((\*))(?<a>[^\\\n* \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:[ \t\x{3000}]\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![*\\)])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<![* \t\x{3000}])\g<d>

    ○1文字  _   <em>
    (?=(?:(?:(?<![\S_\\])((\_))(?<a>[^\\\n_ \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:[ \t\x{3000}]\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![\S_\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<![_ \t\x{3000}])\g<d>

    ○2文字  **  <strong>
    (?=(?:(?:(?<![*\\])((\*)\2)(?<a>[^\\\n* \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:[ \t\x{3000}]\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![*\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<![* \t\x{3000}])\g<d>

    ○2文字  __  <strong>
    (?=(?:(?:(?<![_\\])((\_)\2)(?<a>[^\\\n_ \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:[ \t\x{3000}]\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![_\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<![_ \t\x{3000}])\g<d>

    ○3文字  *** <em><strong>
    (?=(?:(?:(?<![*\\])((\*)\2\2)(?<a>[^\\\n* \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:[ \t\x{3000}]\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![*\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<![* \t\x{3000}])\g<d>

    ○3文字  ___ <em><strong>
    (?=(?:(?:(?<![_\\])((\_)\2\2)(?<a>[^\\\n_ \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:[ \t\x{3000}]\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![_\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<![_ \t\x{3000}])\g<d>

     |  inuuik
  23. 鬼車 正規表現、「開始位置の移動」動作仕様が必要な例

    括弧 () 入れ子 選択 (再帰により階層深さ無制限)

    検索正規表現
    (?<ra>(?:\((?:(?:(?:[^\(\)\\])|(?:\\[\s\S]))*\g<ra>?(?:(?:[^\(\)\\])|(?:\\[\s\S]))*)+(?:\))?))

    対象テキスト  2階層目から先は F3 で進む
    (50
    (49(48(47(46(45(44(43(42(41(40(39(38(37(36(35(34(33(32(31(30(29(28(27(26(25(24(23(22(21(20(19(18(17(16(15(14(13(12(11(10(9(8(7(6(5(4(3(2(1( 0 )1)2)3)4)5)6)7)8)9)10)11)12)13)14)15)16)17)18)19)20)21)22)23)24)25)26)27)28)29)30)31)32)33)34)35)36)37)38)39)40)41)42)43)44)45)46)47)48)49)
    50)

    html の div タグ <div></div> 入れ子 選択 (再帰により階層深さ無制限)

    検索正規表現
    (?=(?:<div\b(?:(?:[^"'])|(?<q>(?=(?:(?:(?:'(?<q1>(?:(?:[^'\\\n])|(?:\\[^\n])|(?:''))*?)')\g<q1>)+\n?$)|(?:(?:(?:"(?<q2>(?:(?:[^"\\\n])|(?:\\[^\n])|(?:""))*?)")\g<q2>)+\n?$))(?:(?<c>["'`])(?:(?:(?!\k<c>)[^\\\n])|(?:\\[^\n])|(?:\k<c>{2}))*?(?:\k<c>)))|(?:["']))*?>))(?:<div\b(?!<[^?])(?:(?:(?!<[^?])(?!\/>)[^<>"'])|\g<q>|<\?|\?>|(?:["']))*?\/>)|(?<ra>(?:<(?<t>div\b)(?:(?:[^<>"'])|\g<q>|<\?|\?>|(?:["']))*?>)(?:\g<q>|(?:(?!(?:<\k<t+0>))(?!<\/\k<t+0>>)[\s\S]))*?(?:\g<ra>(?:(?:[^"'])|\g<q>|(?:["']))*?)*?<\/\k<t+0>>)

    対象テキスト  2階層目から先は F3 で進む
    <div 50>
    <div 49><div 48><div 47><div 46><div 45><div 44><div 43><div 42><div 41>
    <div 40><div 39><div 38><div 37><div 36><div 35><div 34><div 33><div 32><div 31><div 30><div 29><div 28><div 27><div 26><div 25><div 24><div 23><div 22><div 21>
    <div 20><div 19><div 18><div 17><div 16><div 15><div 14><div 13><div 12><div 11><div 10><div 9><div 8><div 7><div 6><div 5><div 4><div 3><div 2><div 1>
    <span  0 />
    1</div>2</div>3</div>4</div>5</div>6</div>7</div>8</div>9</div>10</div>11</div>12</div>13</div>14</div>15</div>16</div>17</div>18</div>19</div>20</div>
    21</div>22</div>23</div>24</div>25</div>26</div>27</div>28</div>29</div>30</div>31</div>32</div>33</div>34</div>35</div>36</div>37</div>38</div>39</div>40</div>
    41</div>42</div>43</div>44</div>45</div>46</div>47</div>48</div>49</div>50
    </div>

     |  inuuik
  24. こんばんは。

    強調の開始と終了に同じマークを使っているために生じる問題だと思います。
    ですから、HTMLのように「<>強調</>」などとするのが確実のように感じます。

    一応、「**」で囲まれた領域に交互にマッチする正規表現を考えてみました。

    (?<=(\*\*))[^*]+?(?=(((\*\*)[^*]*(\*\*)[^*]*)|((\*\*)[^*]*(\*\*))|((\*\*)(\*\*)[^*]*))*(\*\*)[^*]*$)

    ・強調させたい部分の右側には「**」が奇数個あるという考えです。
    ・和文中に「*」が奇数個あるとき、その左側はマッチしません。

    いかがでしょうか。

    エディタの正規表現マッチについては、現状維持に一票です。
    置換対象とマッチ文字列が異なることがあるという問題はありますが、予想外のマッチが分かったり、漏れがないので初級者に優しいというのがその理由です。

    それでは。

     |  手石
  25. ● inuuik さん

    ご無沙汰しております、書き込みありがとうございます。
    Markdown の強調表示出来てるーーー!しかも全部対応されてる…!すごすぎます。

    何がどうなっているのかは私の頭では理解できませんが、確かに理想的な動作をしていると思います。
    神業すぎて言葉も出ませんが、、、スゲー…

    ● 手石 さん

    こんばんは、コメントありがとうございます。
    そうなんですよね、どこから開始でどこから終了なのか判別できませんから、\*\*.*?\*\* という正規表現ではすべてに一致しても間違いではないですよね。
    ほんと、Markdown はややこしい限りです。

    Mery の仕様について現状維持、一票ありがとうございます。
    おっしゃる通り、漏れが無い、という点で私も現状が好ましいと考えております。
    他のエディタの仕様である、マッチした文字列の次から検索する方式は、おそらく速度的な問題でそうなっているのだろうと推測しますが、Mery のように 1 文字ずつマッチする方式だと確かに遅くなることは考えられますが、一応普通の使い方ではそれほど遅さを感じないんじゃないかな、という程度には検証もしております。

    とりあえず可能な限り現状維持の方向で進みたいところではありますね。

     |  Kuro
  26. Kuro さん、お久し振りです。ご試用いただき嬉しいです。ありがとうございます。

    たぶん 259 文字の制限内に詰め込んだせいで、難解に見えてます。
    もうほんの少し短く、正規表現文字列内の誤認を避けた版をもう一度書かせて下さい。
    全角 ※abc※ で強調する勝手仕様をおまけにつけました。

    正規表現の一致が、開始位置で次の一致に移動してゆく仕様は、維持をしていただけ
    るなら、とてもありがたいです。

    簡単に動作を体験していただくために、これを使う例として、
        対応する括弧の入れ子を選択、
        対応する html タグの入れ子を選択、
      する検索文字列の正規表現とテスト文字列を先日投稿させていただました。

    どうぞよろしくお願いいたします。
    --------------------------------------------------------------------------------
    Markdown 強調 ( Mery エディタ 鬼車 正規表現) 更新版  2014-03-15(Sat)

    表示 - 編集モード - 編集モードの設定 - text - プロパティ - 強調 - 強調文字列

    動作仕様
      *   <em>
      **  <string>
      *** <em><strong>
      _   <em>
      __  <string>
      ___ <em><strong>

      1行の中で、後ろから前に向かって、組の対応を判定

      * a *     開始の直後、終了の直前、が空白ならリテラル扱い
      _ a _     開始の直後、終了の直前、が空白ならリテラル扱い
                (仕様の「空白に囲まれ」でなく内側のみ判定)
      \* \**    \ エスケープはリテラル扱い
      \_ \__    \ エスケープはリテラル扱い
      ****      4字以上の連続はリテラル扱い
      ____      4字以上の連続はリテラル扱い
      _abc_def_ 開始アンダースコアの前、が空白でないとリテラル扱い
      )*abc(*   開始、終了アスタリスクの前後、が括弧()だとリテラル扱い
      ]*abc*[   開始アスタリスクの前、終了アスタリスクの後、が角括弧[]だとリテラル扱い

    ○1文字  *   <em>
    (?=(?:(?:(?<![*\\()\[\]])(\*)(?<a>[^\\\n*() \t\x{3000}])(?<b>(?:(?<c>\1\1+?)|(?:[^*\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?![*()\[\]])))(?:\g<c>|(?:(?<e>[ \t\x{3000}])\g<d>)|(?:\\[^\n])|(?:[^*\\\n]))*?)+?$)(?<![*\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<!\*|\g<e>)\g<d>

    ○1文字  _   <em>
    (?=(?:(?:(?<![\S_\\])(_)(?<a>[^\\\n_ \t\x{3000}])(?<b>(?:(?<c>\1\1+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:(?<e>[ \t\x{3000}])\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![\S_\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<!_|\g<e>)\g<d>

    ○2文字  **  <strong>
    (?=(?:(?:(?<![*\\])((\*)\2)(?<a>[^\\\n* \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:(?<e>[ \t\x{3000}])\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![*\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<!\*|\g<e>)\g<d>

    ○2文字  __  <strong>
    (?=(?:(?:(?<![_\\])((_)\2)(?<a>[^\\\n_ \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:(?<e>[ \t\x{3000}])\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![_\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<!_|\g<e>)\g<d>

    ○3文字  *** <em><strong>
    (?=(?:(?:(?<![*\\])((\*)\2\2)(?<a>[^\\\n* \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:(?<e>[ \t\x{3000}])\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![*\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<!\*|\g<e>)\g<d>

    ○3文字  ___ <em><strong>
    (?=(?:(?:(?<![_\\])((_)\2\2)(?<a>[^\\\n_ \t\x{3000}])(?<b>(?:(?<c>\1\2+?)|(?:(?!\1)[^\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?!\2)))(?:\g<c>|(?:(?<e>[ \t\x{3000}])\g<d>)|(?:\\[^\n])|(?:(?!\1)[^\\\n]))*?)+?$)(?<![_\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<!_|\g<e>)\g<d>

    ※勝手仕様※  全角 ※(こめ)
      (※abc※) 開始※ の前または 終了※ の後 が括弧()だとリテラル扱い
      ]※abc※[ 開始※ の前または 終了※ の後 が角括弧[]だとリテラル扱い

    ○全角1文字  ※  <strong>
    (?=(?:(?:(?<![※\\()\[\]])(※)(?<a>[^\\\n※ \t\x{3000}])(?<b>(?:(?<c>\1\1+?)|(?:[^※\\\n])|(?:\\[^\n]))*?)\g<a>(?<d>\1(?![※()\[\]])))(?:\g<c>|(?:(?<e>[ \t\x{3000}])\g<d>)|(?:\\[^\n])|(?:[^※\\\n]))*?)+?$)(?<![※\\])\1(?:\g<a>|(?:\\[^\n]))\g<b>(?<!※|\g<e>)\g<d>

     |  inuuik
  27. 初めまして。Mery愛用者です。
    質問させて頂きたいのですが、下記のサイトは
    Kuroさんが作られたページでしょうか?
    http://www.haijin-boys.com/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8

    そのサイトの構文ファイルの中にある、HTML5.zipを使いたいと思っておりますが
    DLのページに
    「警告:この種類のファイルは悪意のあるコードを含んでいる可能性があります。
     実行するとシステムが危険にさらされる可能性があります。」
    とあるので、躊躇しております・・・。

    宜しくお願いします。

     |  きはち
  28. ● きはち さん

    Mery をご愛用くださりありがとうございます。

    ご質問いただいたサイト (MeryWiki) は私が作成したサイトです。Wiki というシステムを使って作っており、構文ファイルなど、ユーザの方が自由にファイルをアップロードできる仕組みになっています。

    誰でも自由に投稿が出来るという特性上、ウイルスなどを含んだ悪意のあるファイルが投稿されることが無いとは言い切れませんので Wiki を使用したシステムではこのメッセージが表示されるようになっているようです。

    HTML5.zip を確認してみましたがこれは安全なファイルです。

    ただ、すべてのファイルが安全という保証はできませんので、念のためご自身でもウイルスチェックをされたほうがよろしいかと思います。お手数をおかけしますがよろしくお願いいたします。

     |  Kuro
  29. Kuro 様
    分かりやすい説明ありがとうございます。
    これからも使わせていただきます。

     |  きはち
  30. 初めまして。自分に合ったエディターを探し続けてここにやって参りました。
    フリーのエディターでは現在このソフトをメインに使わせて頂いています。
    Meryというソフト名も気に入ってます。(名前を重要視する変わり者です)

    質問があるのですが、キーマクロを指定回数実行する簡単な方法はあるのでしょうか?
    現状は登録したキーマクロを手動でF4キー押しているのですが100回を超えてくると少し大変です。
    方法を探したつもりですが見つかりませんでした。
    HPやwiki上に方法が書いてあるならば、無視して下さって結構です。

    お忙しいとは思いますが、よろしくお願いします。

     |  temp
  31. ● temp さん
    指定した回数マクロを実行するマクロを書けば解決ですね.
    元のマクロをいじってもよければ,
    for (var i=0; i<100; i++) {
      (function(){
        // 元々のマクロ処理
      })();
    }
    のようにすれば,恐らく問題ないはずです.

    別にマクロを用意し,そちらから対象のマクロをロードするということも可能です.
    http://www.haijin-boys.com/wiki/include%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
    にある include.zip を解凍して My Macros に配置し,次のコードを実行してみて下さい.

    #include "include/IO.js"
    var MyMacros = new IO.Folder(MeryInfo.GetMacroFolderPath());
    var macros = MyMacros.GetFiles("*.js");
    var popup = CreatePopupMenu();
    for (var i=0; i<macros.length; i++) {
      popup.Add(IO.Path.GetBase(macros[i].GetName()), i+1);
    }
    var id = popup.Track(mePosMouse);
    if (id > 0) {
      var code = IO.Include(macros[id-1].GetPath());
      var loop = Number(Prompt('反復回数を指定して下さい.', '10'));
      for (var i=0; i<loop; i++) {
        (function(){eval(code)})();
      }
    }

     |  ks
  32. ks様
    解決策を教えて頂いて、ありがとうございます。

    現在、使っているマクロが一つしかないので
    ks様のコードを参考にして次のようなマクロを使おうと思います。
    var loop = Number(Prompt('反復回数を指定して下さい.', ''));
    for (var i=0; i<loop; i++) {
    //元々のマクロ処理
    }
    今後、使用マクロが増えた時にはマクロを呼び出すコードを使わせて頂きたいと思います。
    それにしてもマクロを使えば何でも実現可能そうですね。凄いです。

    ようやく自分に合った最高のテキストエディターを見つける事ができました。
    OSが変わらない限りMeryをずっと使い続けると思います。
    本当にありがとうございました。

     |  temp
  33. ● temp さん
    無事確認いただけたようで,安心しました.
    私のコードを参考にそのコードが書けてますので,自分でマクロをカスタマイズしていくこともできるかと思います.
    マクロや正規表現は少し覚えるだけでも役に立つ場面が多々ありますので,触ってみることをお勧めします.
    # 個人的には正規表現での検索や置換は,いくつかの構文を覚えるだけで格段に能率が上がります

    > それにしてもマクロを使えば何でも実現可能そうですね。凄いです。
    手でできることは大概できる,と思っています.
    今回のような繰り返しや,選択されている/されていない場合での処理わけなどはマクロの十八番ですね.
    Wiki には便利なマクロがありますので,是非チェックしてみて下さい.

     |  ks

コメントを残す