アイコンの説明
アイコン記述言語は、さまざまな MPS 要素(概念、アクションなど)のアイコンの記述とインスタンス化に役立ちます
この言語には、次の 2 つの目的があります。
クイックアイコンプロトタイピング用のツールを提供する (たとえばコンセプトの新しいアイコンを作る)
アイコンを拡張可能な言語構造にする
第一印象
MPS 言語定義言語でアイコンが必要な場合は、既存の .png ファイルを指す代わりに、目的のアイコンのテキスト説明を入力できます。

jetbrains.mps.lang.resources には、次の 2 つの構成が含まれています。
icon {} は、イメージを javax.swing.Icon クラスのインスタンスとして表します。
iconResource {} は、jetbrains.mps.smodel.runtime.IconResource クラスのインスタンスを返します。

アイコンのプロトタイプを作成する
アイコンを説明するとき、アイコンの作成インテンションから支援を受けることができます。アイコンの作成は、アイコンのテキスト説明を自動的に作成して、プロトタイプをすばやく作成する方法を提供します。

インテンションを呼び出すと、簡単なアイコン定義が作成されます。

この定義は、内部に文字「X」が付いた円形アイコンを記述しています。再生成すると、生成されたアイコンが有効になり、UI に表示されます。

言語の説明
アイコンの説明はレイヤーで構成され、各レイヤーは次のいずれかになります。
原始的な図形
ファイルからロードされたカスタムイメージ
キャラクター
これらのレイヤーは、アイコンを表す単一のイメージに結合されます。これらのアイコンの説明を使用できます。
言語定義言語のさまざまな場所でアイコンを指定する - 概念、アクションなど、アイコンが期待される場所
アイコンを返すことになっている MPS UI のメソッド
言語の拡張
言語は拡張のために開かれています。新しいアイコンタイプを追加するには、新しいコンセプトを作成し、アイコンインターフェースを実装する必要があります。アイコンインターフェースは目的のアイコンを表し、作成プロセス中に .png ファイルに変換されます。
モデルを生成した後、すべてのアイコンが出力モデルから収集され、それらの generate() メソッドが呼び出されます。これらは、対応するアイコンで記述されたイメージに対応する .png ファイルを作成します。アイコンリソースが(アイコン {} 構文を使用して、たとえば、)要求されたとき、Icon.getResourceId() メソッドによって参照されるリソースは、対応するモジュールのクラスローダを使用してロードされた Java アイコンオブジェクトに変換されます。
icon {} vs iconResource {}
リソース言語には、リソースをロードするための 2 つの構造があります。icon{} は javax.swing.Icon クラスのインスタンスとしてイメージをロードしますが、iconResource{} は jetbrains.mps.smodel.runtime.IconResource クラスのインスタンスを返します。2 番目のものは、コア MPS アスペクトで使用されます。これは、javax.swing パッケージに依存すべきではありません。 UI 関連のコードはすべて、アイコン {} を使用します。
静的フィールドを参照するアイコン
Java または BaseLanguage の静的フィールド宣言の形式でアイコンを提供するのが一般的です。ConstantFieldIcon の概念を使用すると、アイコンが期待される場所からこのような静的フィールド宣言を参照できます。
古い UI と新しい UI の両方をサポートするアイコン
MPS は、オプションで、従来の (古い) UI と最新の (新しい) UI という 2 つの異なるバージョンのユーザーインターフェースを提供できます。ユーザーは、設定 | 外観と動作 | 新しい UI で、優先するバージョンを選択できます。MPS 2024.3 以降では、古い UI を有効にする前に、専用の UI プラグインを手動でインストールする必要があります。新しい UI を使用することをお勧めします。
アイコンの説明を提供してレンダリングできる TextIcon では、両方のバリアントを並べて記述できます。新しい UI バリアントを省略すると、古い UI バリアントが古い UI 設定と新しい UI 設定の両方で使用されます。
ファイル名 (FileIcon) で指定されたアイコンでは、古い UI で使用するファイルと新しい UI で使用するファイルの 2 つのファイルを指定できます。古い UI ファイルのみが必須です。古い UI アイコンファイルのみが指定され、MPS が新しい UI で実行される場合、古い UI アイコンファイルを使用する前に、MPS は、アイコン定義で明示的に指定されていなくても、命名規則を使用して新しい UI に適したファイルを見つけようとします。
命名規則は次のとおりです。古い UI アイコンファイル「A.png」が 1 つ指定されている場合、MPS は「A.png」と同じディレクトリに「A_newui.svg」という名前のファイルアイコンが存在する場合、そのファイルアイコンを使用します。これにより、言語設計者は、すべてのアイコン定義でアイコンを手動で指定しなくても、新しい UI に適したアイコンをすばやく追加できます。古いアイコンファイルと新しいアイコンファイルの両方として、「.png」と「.svg」の両方の形式がサポートされていることに注意してください。ただし、ヒューリスティックでは、「.svg」ファイルが存在することが前提となっています。
ビルドスクリプトでのアイコンのサポート
ファイルアイコンとテキストアイコンは両方とも、生成された Java ソースとともに、モデルの Java ソースディレクトリにイメージファイル (.png または .svg) をコピーまたは生成します。ビルドスクリプトがイメージをリソースとして扱うには、java オプション要素を使用してリソースファイルのファイルマスクを指定する必要があります。
コピーリソースフラグが true に設定されていることにも注意してください。
アイコンの取り扱い
モジュール相対パス (${module}/-relative path で指定されたアイコン / イメージ) を持つすべてのアイコンは、ファイルとしてディストリビューションモジュールにコピーされ、この単一の場所でアクセスされます。第一に、これはディストリビューションとソースモジュールの両方からアイコンにアクセスできます。第二に、使用ごとにイメージファイルが重複するのを防ぎます。実行時にアイコンファイルを見つけるために、そのパスはモジュールの場所に対して解決されます。この検出を有効にするには、ビルドプロジェクトのモジュールの説明に、アイコンイメージを含むフォルダーを指すリソースルートが含まれていることを確認します。モジュールが jetbrains.mps.lang.resources を使用する場合は、デフォルトの icons/、resources/ ワイルドカードを使用して、インテンションを使用してリソースを追加できます。
関連ページ:

引用符
引用は、必要な構造を持つノードを簡単に作成できるようにする言語構造です。もちろん、smodelLanguage を使用してノードを作成し、同じ smodelLanguage を使用して、適切な子、プロパティ、参照を手動で入力することができます。ただし、これを実現するためのより簡単で視覚的な方法があります。2 つの以下の構築物は、最初のものは、第二の計画モデルの API を引用を使用して、同じノードを構築します。node<IntegerType> node = <int>; n...

コンセプト機能
概念関数を使用すると、言語設計者は言語ユーザーにフックを残すことができます。これにより、ユーザーは生成されたコードで活用するコードを提供できます。例: エディター、制約、インテンションなど、MPS が言語設計に提供するほとんどの言語は、概念関数を活用します。インスペクターウィンドウでそれらの使用箇所を見つけることもできます。コンセプト関数は jetbrains.mps.baselanguage で定義されており、BaseLanguage コードが含まれています。このコードは、生成時に生成された Jav...