デフォルトの構文定義の拡充について

  1. 5 年前から使わせていただいております。

    C# や JavaScript の編集をしていると、
    一部の新しいキーワードが色付けされないことに違和感を覚えます
    (JS で arguments や await、let などが登録されておらず、
     byvalue や operator などの見慣れない単語が登録されている)。

    こちらについてデフォルトの構文定義を更新いただくことはできないでしょうか。

     |  Toru  |  返信
  2. ご愛用ありがとうございます。

    デフォルトの構文定義、確かに結構古くなってますね ^^;
    自分が興味のない言語は完全に放置してます…。

    最新の予約語一覧のデータ (できれば公式のヤツ) があれば、更新することは可能ですので、情報をいただけると助かります。

     |  Kuro  |  返信
  3. JS であればこちらが参考になります。
    https://www.w3schools.com/Js/js_reserved.asp
    async や constructor、get、set はコンテキストキーワード扱いなのか
    リストに含まれていませんが、一緒に含めてもらえると嬉しいです。

    C# はこちらに完全なリストがあります。
    https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/

    以上よろしくお願いいたします。

    > ご愛用ありがとうございます。
    >
    > デフォルトの構文定義、確かに結構古くなってますね ^^;
    > 自分が興味のない言語は完全に放置してます…。
    >
    > 最新の予約語一覧のデータ (できれば公式のヤツ) があれば、更新することは可能ですので、情報をいただけると助かります。

     |  Toru  |  返信
  4. 情報ありがとうございます。

    > JS であればこちらが参考になります。
    私のほうでも調べてみたのですが、JavaScript の予約語やキーワードってなかなか公式文書は見つかりませんね。Atom や VS Code、Sublime Text、Adobe Brackets で強調されるか確認してみたりしましたが、いずれもいまひとつ。

    > https://www.w3schools.com/Js/js_reserved.asp
    ↑いただいた URL の情報、調査してみましたが信頼性高そうですし、標準の予約語以外 (Other Reserved Words) でブラウザなどで実装されている予約語も掲載されていて良さそうですね。

    上記サイトから「JavaScript Reserved Words」と「JavaScript Objects, Properties, and Methods」と「Other Reserved Words」を登録しようと思います。

    > async や constructor、get、set はコンテキストキーワード扱いなのか
    > リストに含まれていませんが、一緒に含めてもらえると嬉しいです。
    確かに、async などは含まれていませんね。言語仕様に詳しくないので判断しかねますが、個別対応してしまうと次に更新するときに漏れてしまいそうなので、上記 4 つだけであれば後ほど手動で追加していただければ幸いです。

    > C# はこちらに完全なリストがあります。
    > https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/
    ありがとうございます。
    現状の Mery でも上記 C# のサイトのリストとほぼ同等ですが、こちらは「コンテキスト キーワード」のほうを追加登録ということでよろしいでしょうか?

    C# サパーリなので、「コンテキスト キーワード」が何なのかわかりませんが、abstract とかの通常の予約語 (Mery の強調文字列1) とは別の色 (Mery の強調文字列4ぐらい?) を割り当てておけば良いのかな。

     |  Kuro  |  返信
  5. > C# サパーリなので、「コンテキスト キーワード」が何なのかわかりませんが、abstract とかの通常の予約語 (Mery の強調文字列1) とは別の色 (Mery の強調文字列4ぐらい?) を割り当てておけば良いのかな。
    コンテキストキーワードは言語のアップデートに伴って後から追加されたキーワードです。
    識別子として有効な単語ではありますが、特定の文脈(コンテキスト)においてのみキーワード扱いされます。

    とはいえそのような単語をわざわざ識別子に使うケースはあまりない上、
    世の highlighter は文脈に関係なく通常のキーワードと同じ色で表示するため、
    通常のキーワードと同じ色で大丈夫かと思われます
    (ちなみに VS は文脈を判断した上で通常のキーワードと同じ色で表示します)。

     |  Toru  |  返信
  6. ご返信ありがとうございます。

    なるほど、勉強になりました。それでは、通常のキーワードと同じ色で追加登録しておきますね。次のバージョンで対応できると思いますので、今しばらくお待ちくださいませ。

     |  Kuro  |  返信
  7. > ご愛用ありがとうございます。
    >
    > デフォルトの構文定義、確かに結構古くなってますね ^^;
    > 自分が興味のない言語は完全に放置してます…。
    >
    > 最新の予約語一覧のデータ (できれば公式のヤツ) があれば、更新することは可能ですので、情報をいただけると助かります。
    JS(ECMAScript)の予約語の公式文章はこちらですね(結構重いです)

    ・予約語
    - https://tc39.github.io/ecma262/#prod-Keyword
    [await break case catch class const continue debugger default delete do else export extends finally for function if import in instanceof new return super switch this throw try typeof var void while with yield]
    [let static](NOTE内)

    ・将来のための予約語
    - https://tc39.github.io/ecma262/#sec-future-reserved-words
    [enum]
    [implements package protected interface private public](NOTE内)

     |  S  |  返信
  8. 情報ありがとうございます。
    公式文書なるものが存在したのですね。

    Mery Ver 2.6.9 では、ここで教えていただいた "www.w3schools.com" の予約語一覧をもとに更新しましたが、いま確認してみたところ公式文書の予約語もきちんと含まれていました。

    今後、更新のときには教えていただいた公式文書も参考にさせていただこうと思います。

     |  Kuro  |  返信
  9. 大変遅くなりましたが、構文定義の更新をしていただきありがとうございました。
    おかげさまで大変作業がはかどります。

     |  Toru  |  返信
  10. ご確認ありがとうございます。特に問題なさそうで安心しました。
    こちらこそ、その節は予約語一覧の情報ありがとうございました。

    またお気づきの点などございましたら、よろしくお願いいたします。

     |  Kuro  |  返信
  11. 途中から恐れ入ります。
    phpの構文定義についてですが、
    先日使用した際foreachがキーワードとして認識されないみたいでした。
    他にもphpのwebマニュアルに載っているキーワードが必ずしも認識されていないようでした。
    (Mery (x64) ver2.6.11)
    phpにはあまり詳しくなく大変恐縮ですが、ご確認のほど宜しくお願い致します。

     |  php初心者  |  返信
  12. 書き込みありがとうございます。

    > phpの構文定義についてですが、
    > 先日使用した際foreachがキーワードとして認識されないみたいでした。
    Mery のメニューから [表示] → [編集モード] → [編集モードの設定] で、編集モードの一覧が表示されますので、そこから [PHP] を選択して [プロパティ] より、強調文字列の追加が可能となっておりますので、そちらで登録いただければと思います。

    > 他にもphpのwebマニュアルに載っているキーワードが必ずしも認識されていないようでした。
    そうなんですよね。Mery の編集モードの構文すべてを常に最新に保つのは、私ひとりの力ではなかなか厳しくて、PHP なんかはもうずいぶん昔の状態のままです ^^;

    マニュアルから強調文字を抽出して、キーワードの特性ごとに色分けして、、、と、言語仕様を知らないと、それだけで非常に時間がかかってしまいます。

    PHP に詳しい方のご協力があればなんとかなるかもしれません ^^

     |  Kuro  |  返信
  13. 多くの編集モード(拡張子)に対応させてあるから、それを1人でメンテナンスしようと思うと大変ですね。
    編集モードの強調文字列みたいに、個人で対応できるものは個人に任せてしまって良い気がします。
    そして、個人で対応したもの・・・例えば、強調文字列なら、wiki の構文ファイルのページに載せてもらえたらベストなんでしょうけれど。
    自分は、wiki に載せる方法がよく分かっていませんが。^^;

    ちなみに、現状のキーワード(予約語)の分類基準はどうされているのでしょうか?
    言語を余り知らないので、それぞれでの言語での適切な表現が分かりませんが、現状の5、6個の編集モードを見た限り、↓のように受け取りました。

    強調1:コマンド/命令/関数
    強調2:タグ
    強調3:HTMLの属性
    強調4:ECHO/#/クラス?コンストラクタ?
    強調5:%, @/メソッド?
    強調6:
    強調7:
    強調8:

     |  名無し  |  返信
  14. php初心者 さんへ

    foreach は、以前の版(2012/06/27)には強調文字に含まれていたのですが、
    2年前に更新(2016/09/03)された時に、なぜか消えていました。

    他にもいつくかのキーワードの増減がありました。
    現在のマニュアルページ(http://php.net/manual/ja/reserved.php)にある、
    クラス/関数のすべてを更新するところまではすぐにはできませんでした。
    まったく PHP 言語に詳しくないのですが、
    更新で消えたものを復活した程度でも良ければ、ご用意できます。

    構文ファイル
    php.msy
    https://gist.github.com/inuuik/3c5d7e860ec64c1240561b55cf418424
    ここから Download ZIP をクリックすると、
    3c5d7e860ec.. から始まる、長い名前の zip が受信できます。

    これを解凍してフォルダを開いてゆくと、php.msy があります。

    この php.msy を Mery のインストールされたフォルダなどに移動してから、

    Mery で、何か php のファイルを開き、
    表示 > 編集モード > PHP > 編集モードの設定 > PHP > プロパティ

    "PHP" のプロパティ が開いたら…

    まず現在の内容を保存しておくために、[エスクポート(X)...]
    で php_now.msy などの名前で保存してください。

    [インポート(P)...] をクリックして、先ほど移動した php.msy のある場所
    から php.msy を [開く(O)] します。

    すぐに上書き確認が表示されますので、上書きします。

    これで、強調と構文の表示設定が変更されます。
    個々のキーワードの色は必要に応じて書き換えてお使い下さい。

    この php.msy は、どなたかの良い作品を待つ間の簡易(確認甘々)対応です
    ので、転載なしでお願いいたします。

    Kuro さん おひさしぶりです。
    これまでたくさんのお願いを聞いて下さって、あらためまして、
    本当にありがとうございます。

     |  inuuik  |  返信
  15. > 編集モードの強調文字列みたいに、個人で対応できるものは個人に任せてしまって良い気がします。
    そうなんですよね、編集モードのカスタマイズ機能がついているわけですし…。
    もちろん、デフォルトで対応できるに越したことはないですから、データさえ頂ければデフォルトとして登録するのですけどね。

    > そして、個人で対応したもの・・・例えば、強調文字列なら、wiki の構文ファイルのページに載せてもらえたらベストなんでしょうけれど。
    ですです (w
    私も、そういう魂胆で、誰かが作ってくれたらいいなーと思って MeryWiki を作りましたからね~。投稿してくださる方に感謝です。

    > ちなみに、現状のキーワード(予約語)の分類基準はどうされているのでしょうか?
    基準はありません ^^;
    見た目がカッコイイエディタ (Sublime Text の Monokai テーマ) などを参考に、適当に割り当てています。C++ とか C# とか Python とか Ruby とかサッパリわからないですから…。

     |  Kuro  |  返信
  16. ご対応ありがとうございます、そしてお久しぶりですね ^^

    > 2年前に更新(2016/09/03)された時に、なぜか消えていました。
    たぶんその時に、最新にしたろ!と思ってどこぞの IDE やエディタなどから強調文字列を拝借してきたのだと思います。PHP 公式の IDE などがあればありがたいのですけどね。

    > これまでたくさんのお願いを聞いて下さって、あらためまして、
    > 本当にありがとうございます。
    こちらこそ面白いアイデアをありがとうございました。

    たしか Chakra 以来でしょうか。その時に、今度コメントを頂いたときにお伝えしようと思っていた機能ですが、辞書ファイル (Ext フォルダ) の中の txt の 1 行目に「^」を書いておけば、単語補完で文書内からの単語の抽出を抑制できます。

    html.txt だとこんな感じ。
    --------
    ^
    DOCTYPE
    a
    abbr
    ad
    address
    .
    .
    .
    --------

    どのバージョンから実装したか忘れましたが、たぶん Chakra 対応の時だと思います。最近、記憶喪失気味なので、すでにお伝えしていたらスミマセン… ^^;

     |  Kuro  |  返信
  17. ご回答ありがとうございます。
    了解しました。

    別件で、「単語のみ」とか「大文字小文字を区別」などの条件は複数の文字列についてまとめて変更できますが、文字色はまとめて変更できないのでしょうか?
    エクスポートして msy ファイルを直接編集すれば良いので、現状でできなくても特に問題はありませんが。

    あと、「タグ開始」とか「タグ終了」とかが設定されている編集モードに、そこが未設定の msy ファイルを上書きでインポートしても、以前の設定は消えないのですね。
    通常、そのようなことをすることはないと思いますので、これもそれほど問題ないと思いますが、一応ご報告。

     |  名無し  |  返信
  18. 上記は、「編集モードの設定」での強調文字列の設定についてです。

     |  名無し  |  返信
  19. ご返信ありがとうございます。

    > 別件で、「単語のみ」とか「大文字小文字を区別」などの条件は複数の文字列についてまとめて変更できますが、文字色はまとめて変更できないのでしょうか?
    これは画面の設計上、対応が難しい部分ですね。
    マウスクリックによる色選択は便利だと思ったのですが、その反面、そういった不都合が発生してしまいますか…。

    やるとしたら、下記のパターンが考えられますね。

    (1) 色をマウスクリック (またはスペースキー) したら、その項目の色に、選択中の項目もすべて合わせる

    (2) 色をマウスクリック (またはスペースキー) したら、選択中の項目の色をすべて +1 する

    (3) 色をマウスクリックする方式を廃止して、[タグの終了] の下あたりに [色] を選択するドロップダウンリストを設ける

    こんな感じでしょうか。(3) は面倒くさそうですが、(1) か (2) なら実装できると思います。

    > あと、「タグ開始」とか「タグ終了」とかが設定されている編集モードに、そこが未設定の msy ファイルを上書きでインポートしても、以前の設定は消えないのですね。
    はい、これはあえてそういう仕様にしたようです。プログラムを確認したところ、空っぽだったら上書きしないっていう処理をわざわざ設けていました。要望があってそうしたのか、何か企みがあったのか覚えていませんが…

     |  Kuro  |  返信
  20. あ、「追加」と「上書き」、選べたんですね。単純に上書きのパターンを作り忘れているだけかも…

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

    色選択について、現状のマウスクリックによる操作が良いと思います。
    異なる色が設定されている文字列を一度に選択した場合の動作までは考えていませんでした。
    色をまとめてずらしたい場合は (2) も便利だとは思いますが、個人的には (1) が普通の動作のような気がします。

    コメントしておいて難ですが、色選択も上書きインポートもそれほど需要があるとは思いませんので、対応を要望したいほどのことではありません。

    もうひとつ別件で。
    並び順を色→アルファベットの順にしておきたいのですが、[追加]ボタンをクリックしたときに選択している文字列の次あるいは前に追加されるようにするのは難しいでしょうか?
    (これでも、次だと一番最初、前だと一番最後には追加できませんが。)
    [ソート]ボタンや[上へ][下へ]ボタンみたいな機能は望みません。
    現状の、最後に追加されていく方式のほうが便利なのかな?
    エクスポート→上書きインポートすれば良いだけですし、これもそれほど需要があるとは思いませんが。

     |  名無し  |  返信
  22. ご返信ありがとうございます。

    > 色をまとめてずらしたい場合は (2) も便利だとは思いますが、個人的には (1) が普通の動作のような気がします。
    そのほうがわかりやすいかもしれませんね。
    (1) か (2) の方式ならたぶん数分で実装できますし、項目が増えるわけでもないので使わない人には気づかれないレベルだと思いますから、ちょっと作ってみます。

    > 並び順を色→アルファベットの順にしておきたいのですが、[追加]ボタンをクリックしたときに選択している文字列の次あるいは前に追加されるようにするのは難しいでしょうか?
    強調文字列に並び順を設けていないのは、ユーザさんに画面上で並び順を意識してもらいたくないからです。

    エディタエンジンの仕様上、色分けを高速に行うために内部で速度優先の並び替えを行っているので画面上で見えている並び順に意味はありませんが、もし画面上で並び順が変更できてしまうと構文解析の優先度だと思われてしまいますから…。

     |  Kuro  |  返信
  23. ご回答ありがとうございます。
    並び順について、そういう意図があったのですね。
    了解しました。
    以前に、文字列が重複するような設定をしたときに思ったような表示にならなかったような記憶がありますが、内部的な優先順位が関係したのですね。

     |  名無し  |  返信
  24. 色選択のほうは実装できた気がします。
    ちょっと提案していた仕様から変更しましたが、柔軟性があって良い感じに仕上がりました。

    > 以前に、文字列が重複するような設定をしたときに思ったような表示にならなかったような記憶がありますが、内部的な優先順位が関係したのですね。
    そうなんです。

    マーカー機能のほうは強調文字列と設定画面が似ていますが、上下ボタンがついてます。

    これはマーカーの登録数って多くても 100 個ぐらいかなーってことで、上から順にマッチングさせていっても実用に耐える速度が出るので、ユーザさんが順序を変更できるようになっています。

    普通に上から順にマッチングすると、画面上の文字数 x 強調文字の登録数 (と場合によっては文字列の長さ) 回のマッチングがキャレットを移動させるたびに発生するので非常に遅くなってしまうんです。

    強調文字列のほうは普通に登録数が 1000 個を超えたりするので、内部で強調文字リストを分解して索引を付けたり並べ替えたりしてすごいがんばってます。

    検証したときは 5 万単語ぐらい登録してもサクサク動いていました。正規表現を有効にした場合は、そもそも索引なんて関係なくなるので 1000 個も行くと結構重くなりますけどね… ^^;

     |  Kuro  |  返信
  25. 強調文字列はユーザー側では変更できないと思い込んでおりましたが、
    だいぶ前に実装されていたのですね。orz
    よく調べずに質問をしてしまい申し訳ございませんでした。

    それで、inuuikさんのphp.msyを適用したところ、
    foreachはもちろん、
    [PHPマニュアル > 付録 > 予約語の一覧]
    http://php.net/manual/ja/reserved.keywords.php
    に載っているキーワードについても網羅されておりました。
    私が使用する範囲では十分ではないかと思います。
    使えそうな予約語一覧のデータを見つけたり、
    今回のmsyファイルを使用して気づいた点等があればご報告したいと思います。
    (でも、私も少し調べてみましたが、予約語一覧のデータはありそうでなかなか無いものですね。)

    Kuroさん、inuuikさん、ご親切にどうもありがとうございました。

     |  php初心者  |  返信
  26. > …してきたのだと思います。PHP 公式の IDE などがあればありがたい…

    なるほど、出典が別だと、ありがちですね。公式 IDE はない様子なので、今回は自前で
    なんとかしてみようかと思います。もしかしてできた時には、お知らせします ^^/
    現在のマニュアルページ(http://php.net/manual/ja/reserved.php)とそのリンクを参照
    してみます(しかし php.msy は大きい)。

    > その時に、今度コメントを頂いたときにお伝えしようと思っていた機能

    ありがとうございますっ!
    思いもかけず、本当に有難いです。お礼すらしていなかったこと深く反省、実に面目ない。
    内容がここと関連なくなってしまうので、フォーラムの別エントリに続きを書きます。

     |  inuuik  |  返信
  27. php初心者さん

    > http://php.net/manual/ja/reserved.keywords.php
    > に載っているキーワードについても網羅されておりました。
    > 私が使用する範囲では十分ではないかと…

    仮データ php.msy をお試し下さり、ありがとうございます。
    なんとか使えそうとのこと、何よりです。

    元の削除項目に加えて、キーワード・予約語・定数は、予定分も含め
    記載項目を入れました。
    http://php.net/manual/ja/reserved.php
    キーワードのリスト
    定義済のクラス
    定義済みの定数
    コアの定義済みの定数
    マジック定数
    http://php.net/manual/ja/language.constants.predefined.php
    標準の定義済み定数
    コアモジュール の定数
    その他の予約語の一覧

    php では、とてもたくさんのクラス/関数とそれらの定数が、リストに
    含まれるため、コアの照合の途中でくじけました。
    さらに、添付と PECL の記載分は、さらに時間と気力が… ^^;
    http://php.net/manual/ja/extensions.membership.php

    今回は php.msy と同じ内容で単語補完(入力補完)用の php.txt も
    あります。Ext フォルダにある php.txt の名前を変更または移動してから、
    この Ext に解凍した php.txt をコピーしてお使いください。

    単語補完辞書ファイル
    php.txt
    https://gist.github.com/inuuik/2b6e6b767d0385aed001c70cef77df8c
    ここから Download ZIP をクリックすると、
    2b6e6b767d0.. から始まる、長い名前の zip が受信できます。

    先の php.msy と同様に解凍してください。

    できることならデフォルトで対応していただけるよう、材料を集めて
    みます。

     |  inuuik  |  返信
  28. > 色選択のほうは実装できた気がします。
    > ちょっと提案していた仕様から変更しましたが、柔軟性があって良い感じに仕上がりました。
    余り使わないであろう機能かもしれませんが、実装ありがとうございます。

    強調表示の仕組みについては、なるほどです。
    処理速度を考慮して、いろいろと工夫・動作確認されているのですね。感謝です。

     |  名無し  |  返信
  29. inuuikさん、重ね重ねありがとうございます。m(_ _)m
    ありがたく使わせていただきます。

     |  php初心者  |  返信
スポンサーリンク