MPS 2023.3 ヘルプ

汎用プレースホルダーと汎用コメント

汎用プレースホルダー

汎用プレースホルダーは、2 つのノード間の空白を表し、任意のノードコレクションに追加できます。Ctrl+Shift+Enter キーの組み合わせは、コレクション内の現在の位置にプレースホルダーを挿入します。プレースホルダーは透過的に動作します。プレースホルダーノードの補完メニューを呼び出してノードを置き換えるか、Enter キーを押して通常のノードを次の兄弟の位置に追加することができます。

たとえその言語がそのような概念をサポートしていなくても、どの言語の汎用プレースホルダーユーザーを使用しても、任意の視覚的なセパレーター(空行)をコードに挿入できます。

EmptyLinePlaceholder.png

汎用コメント

汎用プレースホルダー自体にコンテンツが含まれている場合があります。MPS は、jetbrains.mps.lang.text 言語または汎用開発キットでプレースホルダーのテキストコンテンツを提供します。これにより、基本的なスタイル (太字、斜体、下線)、クリック可能なハイパーリンク、埋め込みノード (コード) をサポートする、完全に編集可能な複数行テキスト言語が提供されます。

TextContentInPlaceholder.png

jetbrains.mps.lang.text 言語または汎用開発キットをインクルードした後、プレースホルダーで「[ 」(角括弧を開く)を押します。テキストを入力および編集できるノードが表示されます。テキストは複数行で、単語で構成されます。

テキスト言語

jetbrains.mps.lang.text 言語は、いくつかのリッチテキスト編集機能で拡張されています。これらの機能は、BaseLanguage の単一行および複数行のコメントでも使用できます。

Shift キーと矢印キーを使用してテキストを選択します。選択できるのは単語全体のみですが、複数行にまたがることができます。クリップボード操作、単語による移動 / 選択、期待どおりにすべての作業を選択します。

MPS コードの一部をテキストに貼り付けると、カプセル化されてツリー形式で保存されます。プレーンテキストエディターからのテキストは、jetbrains.mps.lang.text テキストとの間でコピーして貼り付けることもできます。

任意の単語または選択した単語のコレクションを太字 (Control + B を押す)、斜体 (Control + I を押す)、下線 (Control + U を押す) にすることができます。リンクを追加するには、Alt+Enter を押して、単語のリンクの追加インテンションを呼び出します。

インテンションを使用すると、行を箇条書きまたは番号付きポイントに変換できます。また、2 行の先頭に「-」または「*」を入力すると、箇条書きが作成されます。2 行の先頭に「1. 」のように番号を付けると、行が番号付きポイントに変換されます。箇条書きまたは番号付きポイントの先頭で Tab キーを押すと、そのポイントのインデントが増加し、Shift + Tab を押すとインデントが減少します。

NumBul.png

任意のノードをテキストに挿入するには、テキストノード内でコード補完を呼び出して、「ノード」を選択します。ノードプレースホルダーが表示されるため、任意のサンプルノードを入力できます。埋め込まれたコードでは、インポートされた任意の言語のノードを使用できます。

PlaceholderWithCodeEmbedded.png

テキスト選択は上下選択時に行の一部のみを選択できます。太字にする / 斜体にする / 下線を付けるなどのアクションは、選択時に機能します。プレーンテキストへのコピー / 貼り付けが実装されています。箇条書きと番号付きリストがサポートされるようになりました。

テキスト言語の埋め込み

テキストデータをコンセプトの一部として定義する場合は、通常、テキストコンセプトの子をコンセプトに定義する必要があります。テキストの概念は、行の追加 / 削除 / 編集を処理します(行の概念は、個々の単語の追加 / 削除 / 編集を処理します(単語の概念)。

または、カーディナリティ 1 または 0..N のいずれかで、Line コンセプトの子を定義することもできます。その場合、コンセプトが IHoldLines インターフェースのコンセプトを実装し、抽象メソッドの実装を提供していることを確認してください。これにより、追加のセレモニーと引き換えに、エディターエクスペリエンスをより適切に制御できるようになります。

実験的な文字単位のテキスト言語

jetbrains.mps.core.text 言語には、文字ごとのテキスト表現の実験的な機能が含まれています。次のようなテキスト仮想フォルダーにある概念:

  • TextualElement

  • レター

  • 段落

  • BulletPoint

  • NumberedPoint

  • といくつかの他の

テキストを個々の文字レベルでモデル化できます。これは、よりスムーズな選択と関連するテキスト操作において、単語ごとのアプローチよりも優れています。一方、テキストのサイズが大きくなるにつれて、エディターのパフォーマンスは急速に低下します。テキストのサイズが小さい限り、言語でこのアプローチを試すことができます (通常、テキストの半分程度で十分に機能します)。フィードバックに基づいて、この実験をさらに進めるかどうかを決定します。

テキスト言語でのスペルチェック

Word コンセプトのインスタンスのテキストは、MPS によってスペルミスがないかチェックされます。スペルミスのある単語には下線が引かれ、右クリックすると、そのような単語をプロジェクトの辞書(プロジェクトのルートフォルダーにある .mps/dictionary フォルダー)に追加できます。言語が jetbrains.mps.lang.text をより適切に埋め込む場合、jetbrains.mps.lang.text ノードのモデルに保持されているテキストはデフォルトでスペルチェックされます。ただし、コードフラグメント、データ、不可解なコードなど、スペルチェックが想定されていない要素がテキストに含まれている場合は、モデルのその部分のスペルチェックを無効にできます。

独自のコンセプトの「子」のスペルチェックを無効にするには、次の簡単な手順に従います。

  • 「子」が jetbrains.mps.lang.text 言語の TextLine、または Word のいずれかであることを確認します。

  • jetbrains.mps.lang.text.editor モデルをエディターモデルにインポートします。

  • コンセプトのエディターで「子」を表すセルの「コンテキストヒントの追加」セクションで、No_SpellCheck エディターヒントを指定します。(完了メニューにヒントが表示されない場合は、手順 2 に戻ります。)