汎用プレースホルダーと汎用コメント
汎用プレースホルダー
汎用プレースホルダーは、2 つのノード間の空白を表し、任意のノードコレクションに追加できます。Ctrl+Shift+Enter キーの組み合わせは、コレクション内の現在の位置にプレースホルダーを挿入します。プレースホルダーは透過的に動作します。プレースホルダーノードの補完メニューを呼び出してノードを置き換えるか、Enter キーを押して通常のノードを次の兄弟の位置に追加することができます。
たとえその言語がそのような概念をサポートしていなくても、どの言語の汎用プレースホルダーユーザーを使用しても、任意の視覚的なセパレーター(空行)をコードに挿入できます。
汎用コメント
汎用プレースホルダー自体にコンテンツが含まれている場合があります。MPS は、jetbrains.mps.lang.text 言語または汎用開発キットでプレースホルダーのテキストコンテンツを提供します。これにより、基本的なスタイル (太字、斜体、下線)、クリック可能なハイパーリンク、埋め込みノード (コード) をサポートする、完全に編集可能な複数行テキスト言語が提供されます。
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 を押すとインデントが減少します。
任意のノードをテキストに挿入するには、テキストノード内でコード補完を呼び出して、「ノード」を選択します。ノードプレースホルダーが表示されるため、任意のサンプルノードを入力できます。埋め込まれたコードでは、インポートされた任意の言語のノードを使用できます。
テキスト選択は上下選択時に行の一部のみを選択できます。太字にする / 斜体にする / 下線を付けるなどのアクションは、選択時に機能します。プレーンテキストへのコピー / 貼り付けが実装されています。箇条書きと番号付きリストがサポートされるようになりました。
テキスト言語の埋め込み
テキストデータをコンセプトの一部として定義する場合は、通常、テキストコンセプトの子をコンセプトに定義する必要があります。テキストの概念は、行の追加 / 削除 / 編集を処理します(行の概念は、個々の単語の追加 / 削除 / 編集を処理します(単語の概念)。
または、カーディナリティ 1 または 0..N のいずれかで、Line コンセプトの子を定義することもできます。その場合、コンセプトが IHoldLines インターフェースのコンセプトを実装し、抽象メソッドの実装を提供していることを確認してください。これにより、追加のセレモニーと引き換えに、エディターエクスペリエンスをより適切に制御できるようになります。
実験的な文字単位のテキスト言語
jetbrains.mps.lang.text 言語には、文字単位のテキスト表現の実験的な機能が含まれています。次のようなテキスト仮想フォルダーにある概念:
TextualElement
レター
段落
BulletPoint
NumberedPoint
といくつかの他の
個々の文字のレベルでテキストをモデル化できるようにします。これには、よりスムーズな選択と関連するテキスト操作において、単語ごとのアプローチよりも利点があります。一方、テキストのサイズが大きくなると、エディターのパフォーマンスは急速に低下します。テキストのサイズが小さいままである場合は、言語でこのアプローチを試すことができます (通常、テキストの約半分のページが適切に機能します)。フィードバックに基づいて、この実験をさらに進める場合としない場合があります。
テキスト言語でのスペルチェック
Word コンセプトのインスタンスのテキストは、MPS によってスペルミスがないかチェックされます。スペルミスのある単語には下線が引かれ、右クリックすると、そのような単語をプロジェクトの辞書(プロジェクトのルートフォルダーにある .mps/dictionary フォルダー)に追加できます。言語が jetbrains.mps.lang.text をより適切に埋め込む場合、jetbrains.mps.lang.text ノードのモデルに保持されているテキストはデフォルトでスペルチェックされます。ただし、コードフラグメント、データ、不可解なコードなど、スペルチェックが想定されていない要素がテキストに含まれている場合は、モデルのその部分のスペルチェックを無効にできます。
独自のコンセプトの「子」のスペルチェックを無効にするには、次の簡単な手順に従います。
「子」が jetbrains.mps.lang.text 言語の Text、Line、または Word のいずれかであることを確認します。
jetbrains.mps.lang.text.editor モデルをエディターモデルにインポートします。
コンセプトのエディターで「子」を表すセルの「コンテキストヒントの追加」セクションで、No_SpellCheck エディターヒントを指定します。(完了メニューにヒントが表示されない場合は、手順 2 に戻ります。)
関連ページ:
コンセプト機能
概念関数を使用すると、言語設計者は言語ユーザーにフックを残すことができます。これにより、ユーザーは生成されたコードで活用するコードを提供できます。例: エディター、制約、インテンションなど、MPS が言語設計に提供するほとんどの言語は、概念関数を活用します。インスペクターウィンドウでそれらの使用箇所を見つけることもできます。コンセプト関数は jetbrains.mps.baselanguage で定義されており、BaseLanguage コードが含まれています。このコードは、生成時に生成された Jav...
XML 言語
jetbrains.mps.core.xml 言語は、MPS で XML ドキュメントを厳密にモデル化するように設計されています。この言語は、プレーン XML と 1:1 で一致することを目的としており、テキスト XML ファイルに生成されます。構造:XmlFile ルート要素は、XML ファイルを表すために使用する必要があります。これには、1 つ以上のプロローグエントリとルート xml 要素を保持する単一の XmlDocument ノードが含まれています。選択およびカスタマイズが必要なプロローグ要...