CHANGELOG.txtをアウトライン画面で表示したときにレベル1の見出しが複数表示される

  1. Kuroさん、こんにちは。

    Meryをダウンロードすると「Mery」フォルダ内に「CHANGELOG.txt」が付属していますが、そのファイルのことで相談があります。

    CHANGELOG.txtはMarkdown記法で書かれているので、拡張子を「.txt」から「.md」に変更すると、Markdownファイルとして閲覧することができます。

    それで、Meryで「CHANGELOG.md」を開いた後、アウトライン画面を表示するとレベル1の見出しが複数表示されます。

    本来であれば、CHANGELOG.mdのアウトライン画面でのレベル1の見出しは「変更ログ」のみが表示されることが想定されます。

    https://imgur.com/gallery/changelog-md-fOFR9Lq

    ですが、現行のCHANGELOG.txtの拡張子を「.txt」から「.md」に変更して、アウトライン画面で表示すると、レベル1の見出しが「変更ログ」だけでなく、下記8つの行も含まれてしまいます。

    https://imgur.com/gallery/changelog-md-tYd1gJL

    「#begingroup = true」
    「#begingroup = 1」
    「#begingroup = 2」
    「#begingroup = 3」
    「#icon = "****"」
    「#title = "****"」
    「#tooltip = "****"」
    「#include "ファイルのパス" ※絶対パスまたはマクロファイルからの相対パス」

    原因としては、上記8つの行の先頭文字の「#」が、アウトライン画面ではレベル1の見出しと認識されるからだと考えられます。

    それで、現在は暫定的に上記8つの行の先頭文字の「#」の前に半角スペースを挿入することで対応しています。

    ですが、Meryの新しいバージョンがリリースされるたびに上記の対応をするか、差分をコピーして追加するのは手間がかかります。

    よって、CHANGELOG.mdのアウトライン画面のレベル1の見出しが「変更ログ」だけ表示されるようにしてもらえないでしょうか?

    【環境情報】
    Mery: 3.7.6 (x64)
    Onigmo: 6.2.0
    C/Migemo: 1.3
    Tidy: 5.8.0
    Hunspell: 1.7.1
    アウトライン: 3.2.1 (Outline.dll)
    Markdown プレビュー: 1.0.7 (MarkdownPreview.dll)
    検索 バー: 1.0.6 (FindBar.dll)
    OS: Windows 11 (Version 23H2, OS Build 22631.4037, 64-bit Edition)

     |  MSY-07  |  返信
  2. こんにちは、ご報告ありがとうございます。

    確かにそうですね、アウトライン プラグインはあまり使っていなかったので、気づいていませんでした。

    アウトライン プラグインの仕様上、行単位での処理しかできないので、コード ブロック (```) の中を除外するのは難しいんですよね。

    CHANGELOG.md の方を修正するかたちになるかと思いますが、次のバージョンで対応しておきますね。

     |  Kuro  |  返信
  3. ご返信ありがとうございます。

    > CHANGELOG.md の方を修正するかたちになるかと思いますが、次のバージョンで対応しておきますね。

    どうかご対応よろしくお願いします。

     |  MSY-07  |  返信
  4. > 確かにそうですね、アウトライン プラグインはあまり使っていなかったので、気づいていませんでした。

    MeryのアウトラインプラグインはMarkdownとセットで便利に使っています。

    そう言えば、テキストエディターを使い始めた当初は色々なアウトラインプロセッサーを使っていたのですが、どれもしっくりこなかったんですよね。

    それで、最終的にMeryのアウトラインプラグインを使うようになりました。

     |  MSY-07  |  返信
  5. >> MSY-07 さん

    アウトラインプラグインで、言語設定「Markdown」の場合の設定値を以下のようにしても回避できそうです。

    現在: 「#」「##」…以降続く…
    変更後: 「#<半角スペース>」「##<半角スペース>」…以降続く…

    このようにすれば、「#icon」などは引っかからなくなると思います。

    >> Kuro さん

    アプリケーションにもよりますが、「#」の後に半角スペースが無いと見出し記号としてパースされないことも少なくないですから (Markdownプレビュープラグインもそうですね)、上記のようにアウトラインプラグイン自体のデフォルト設定も変更してしまってよい気がします。

    ちなみに…アウトラインプラグイン、割とよく使っているのですが、やはり私も同様にMarkdown内でコードブロック内の文言によく引っかかっています。

    特に私の場合、Shell ScriptやPythonをコードブロックに書くことが頻繁にあるのですが、そうすると両言語ともコメントアウト記号が「#」なのですよね…😅

    そう簡単に実装できるものでないのでしたらご放念いただいて大丈夫なのですが、いったんアイデア程度に書かせてください。
    Meryの場合、Markdownの「```」で囲っている箇所をコメントとして取り扱うことができているので、例えば「コメント扱いになっている箇所をアウトラインに含めない」といったオプション実装が可能なら、前述のような状況は回避できそうだと思いました。やはり難しいでしょうか…?

     |  yuko  |  返信
  6. yukoさん、ご返信ありがとうございます。

    > アウトラインプラグインで、言語設定「Markdown」の場合の設定値を以下のようにしても回避できそうです。
    >
    > 現在: 「#」「##」…以降続く…
    > 変更後: 「#<半角スペース>」「##<半角スペース>」…以降続く…
    >
    > このようにすれば、「#icon」などは引っかからなくなると思います。

    アウトラインプラグインで、言語設定「Markdown」の場合の設定値を教えてもらった通りに変更したら、「#icon」などが表示されなくなりました。

    上記の設定値を設定する前は、Meryに内蔵されているMarkdown構文ファイルをエクスポートした後、正規表現をコピーして設定していたのですが、アウトライン画面に表示されるまで3秒くらい時間がかかっていたので悩んでいました。

    教えてくださってありがとうございます。

     |  MSY-07  |  返信
  7. >> yuko さん、MSY-07 さん

    > アプリケーションにもよりますが、「#」の後に半角スペースが無いと見出し記号としてパースされないことも少なくないですから (Markdownプレビュープラグインもそうですね)、上記のようにアウトラインプラグイン自体のデフォルト設定も変更してしまってよい気がします。

    確かに、そう言われてみるとそうですね。

    次のバージョンではデフォルト値を変えてみます。ただし、デフォルト値なので、現在の設定が勝手に書き換わるわけではなく、新規インストールや [リセット] したときにだけ適用されるかたちになります。

    > Meryの場合、Markdownの「```」で囲っている箇所をコメントとして取り扱うことができているので、例えば「コメント扱いになっている箇所をアウトラインに含めない」といったオプション実装が可能なら、前述のような状況は回避できそうだと思いました。やはり難しいでしょうか…?

    うーん、プラグインからその操作をするのはちょっと難しそうですね。

    実は、Mery のパーサーは「```」をコメントとして認識していますが、テキスト全体を解析しているわけではありません。

    画面に表示されている部分だけをリアルタイムで解析しているだけなので、「ここがコメント」といった情報は持ってないんです。

    なので、やるとしたら、プラグイン側でテキスト全体を解析するパーサーを作成する必要がありますね。

     |  Kuro  |  返信
  8. >> MSY-07 さん

    お役に立てたようで何よりです😊

    >> Kuro さん

    > 画面に表示されている部分だけをリアルタイムで解析しているだけなので、「ここがコメント」といった情報は持ってないんです。
    > なので、やるとしたら、プラグイン側でテキスト全体を解析するパーサーを作成する必要がありますね。

    なるほど、そうなるとこれまた動作速度とのにらみ合いでものすごく大変そうな予感… 一朝一夕でどうにかなるものではなさそうですね。失礼しました。

     |  yuko  |  返信
  9. ご返信ありがとうございます。

    > なるほど、そうなるとこれまた動作速度とのにらみ合いでものすごく大変そうな予感… 一朝一夕でどうにかなるものではなさそうですね。

    Markdown のパーサーを本気で作るとなると、かなりの手間がかかりそうですね😱

    「```」だけ例外的に対応するのは比較的簡単かもしれませんが、Markdown だけを特別扱いするわけにもいかないですしね。

    できるかどうかは置いといて、ひとつのアイデアとしては、Mery 側にプラグインからアクセスできる API を用意して、プラグインが Mery の内部パーサーを使えるようにするという方法があります。

    具体的には、プラグインから位置を渡して、Mery 側でその行付近をパースし、指定した位置の属性を返すというシンプルな仕組みです。

    とはいえ、テキスト全体を解析する必要があるので、動作速度には期待できないかもしれませんが…😅

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

    > 次のバージョンではデフォルト値を変えてみます。ただし、デフォルト値なので、現在の設定が勝手に書き換わるわけではなく、新規インストールや [リセット] したときにだけ適用されるかたちになります。

    アウトラインプラグイン自体のMarkdownのデフォルト設定を変更すれば、CHANGELOG.md以外のmdファイルにも適応されるのでいいですね。

    その方向でお願いします。

     |  MSY-07  |  返信
  11. ご返信ありがとうございます。

    > アウトラインプラグイン自体のMarkdownのデフォルト設定を変更すれば、CHANGELOG.md以外のmdファイルにも適応されるのでいいですね。

    そうですね、それは仕様として対応しておきますね。

    ただ、これだけでは根本的な解決にはならないので、yuko さんが言われている「コメント扱いになっている部分をアウトラインから外す」という方法が必要になると思います。

    今のところ、実現できるかはまだわかりませんが、技術的には面白いアイデアなので、優先度は少し低めにしておきつつ😅、開発に挑戦してみたいと思います。

     |  Kuro  |  返信
  12. > ただ、これだけでは根本的な解決にはならないので、yuko さんが言われている「コメント扱いになっている部分をアウトラインから外す」という方法が必要になると思います。
    >
    > 今のところ、実現できるかはまだわかりませんが、技術的には面白いアイデアなので、優先度は少し低めにしておきつつ😅、開発に挑戦してみたいと思います。

    首を長くして待っていますね。
    まだ暑いので体調には気を付けてくださいね。

     |  MSY-07  |  返信
スポンサーリンク