アプレット

要約:
  • Curl アプレットをインターネット ブラウザに表示することができます。
  • アプレットのメインソースファイルはアプレットファイルと呼ばれます。
  • アプレットファイルは他のファイルからのコードを含むことができ、また、インポートすることもできます。
  • アプレットは、ブラウザと関連付いていない独立型アプレットとして作成することもできます。
Curl アプレットは、インターネットブラウザにロードし実行することが可能な、Curl® 言語で書かれているプログラムです。独立型アプレットの場合はブラウザ外で実行されます。各 Curl アプレットには、Curl® 実行環境 (RTE) が必要になります。この章では、ソースファイルをどの様にまとめてアプレットを作成し、そして、それをブラウザで表示する方法を説明します。
このドキュメント中では、「アプレット」という用語は、内容によって、ブラウザにレンダーされる(ユーザが閲覧する)内容を示す場合と、アプレットのソースコードを示す場合があります。
ソースコードを定義するアプレットは複数のファイルで構成されており、そのファイルの種類も多様である可能性があります。 しかし、各アプレットにはアプレットファイルが含まれている必要があります。

アプレットファイルの条件:

アプレット ファイルはapplet宣言を含んでおり、パッケージやりソースの場所を示すマニフェスト.mcurlファイルを記述することができます。

applet 宣言を使用して、 manifestcompiler-directiveslocale そして resync-as-of などのメタデータをアプレットに指定できます。 「パッケージ」 の セクションの 「メターデータ」 を参照してください。

アプレットの描写

アプレット ファイルの処理では、そのコードが順次評価されていきます。つまり、Curl 実行環境はアプレット全体がロードされるのを待たずに、コンテンツをコンパイルして描写するということです。したがってアプレットのソース コードは、ファイル内でアイテムが定義されないうちはこれを参照できません。Curl アプレット内で新規のテキスト書式またはプロシージャを定義した場合 (直接またはインクルード/インポートしたパッケージから)、それらのテキスト書式やプロシージャは後続のコードでのみ参照できますが、それ以外の場所で参照した場合アプレットは失敗します。 トップレベルのテキストはテキストとして表示されますが、トップレベルの式は評価されます。グラフィカル オブジェクト、可視オブジェクト、またはグラフィカル オブジェクトに変換可能なオブジェクトとして評価される式はブラウザに表示されますが、その他の式は角カッコ内にテキストとして表示されます。

たとえば、次のトップレベルのコード {DisplacementMesh 30, 30} は、DisplacementMesh オブジェクトのインスタンスを作成します。これはグラフィカル オブジェクトではないので、ブラウザには次のようなものが表示されます。
    
       [DisplacementMesh @0x0AE5A870]
    
その一方で次のコード {CommandButton} は、CommandButton オブジェクトのインスタンスを作成します。これはグラフィカル オブジェクトなので、ブラウザには次のようなものが表示されます。





次の例はトップレベルのテキストです (curl ブラケットで囲まれていないことに注意してください)。
let oops:int = 23 + 3
は次のように表示されます。

let oops:int = 23 + 3

その一方、curl ブラケットの中の式

{let oops:int = 23 + 3}
{value oops}
は次のように表示されます。

26
次の例では、上記で説明したすべてのコンテンツを架空のアプレット ファイルに挿入します。

例: アプレットから描写されるコンテンツ
|| Not a graphical object or text
{DisplacementMesh 30, 30}

|| A graphical object
{CommandButton}

|| text
let oops:int = 23 + 3

|| Curl code declaring a global variable oops
{let oops:int = 23 + 3}
|| Presenting the value of oops as text
{value oops}

アプレット ファイルのソースコード

簡単なアプレットでは、アプレット ファイルにアプレットを定義するすべてのコードを含めることができますが、通常は他のソース ファイルのコードをインクルード (include) またはインポート (import) するのが一般的です。実行時には、コンパイラが処理する式のストリームにインクルード ファイルの内容が挿入され、アプレットの処理中にパッケージやパッケージ シンボルがインポートされ、メモリに読み込まれます。
たとえば、次のコードを含む start.curl ファイルがブラウザでロードされて実行されると、テキスト、画像、グラフィックからなるアプレットが表示されます (インクルード/インポート ファイルが存在する場合)。

|| Curl herald that declares this file an applet file.
{curl 8.0 applet}

{import * from RELO.PACKAGES.BIG}

|| Top-level text
Hello World

|| Procedure call to a proc defined
|| in the imported RELO.PACKAGES.BIG package
{get-big-carton}

|| Calling the image text-proc, which creates an instance
|| of an image graphic.
{image source = {url "../my-world.gif"}}

|| An instance of a Curl control
{CommandButton
    label = "Click Me"
}

|| This file could contain any code fragment.
|| It could be plain top-level text, a class definition,
||    an object instance, an include/import statement, etc.
{include "../some-other-file.scurl"}

他のファイルのインクルード

他のファイルと同様に、アプレット ファイルは include 式を使って include 式の場所に他のソース ファイルのコンテンツを挿入することができます。
インクルードできるファイルには以下が含まれます。

インクルードされているファイルにも、他のソース ファイルをインクルードしたり他のパッケージ シンボルをインポートできます。
アプレット ファイルが他のアプレット ファイルをインクルードする場合、インクルードされたファイルはソース コードのフラグメント ファイルとして扱われます。ただし、インクルードされたアプレット ファイルには、メインのアプレット ファイルで指定されているバージョン番号をすべて指定しなければなりません。インクルードされたアプレット ファイル内の applet マニフェスト宣言はすべて無視されます。

パッケージ シンボルのインポート

Curl アプレット ファイルにパッケージ (またはパッケージ シンボル) をインポートして、定義を使用することができます。たとえば、グラフィカル オブジェクトを返すプロシージャ my-procMY-PROCS パッケージで定義されているとします。この場合次に示すように、アプレット ファイルのソース コードでは、このプロシージャを呼び出す前に my-proc または MY-PROCS パッケージ全体をインポートする式を含める必要があります。
{curl 8.0 applet}
{applet
    manifest = "../my-manifest.mcurl"
}

{import * from MY-PROCS}

{my-proc}

アプレットの実行

通常のアプレット(.curl ファイル)はブラウザ内で実行されます。独立型アプレット(.dcurl ファイル)はブラウザ外で実行されます。独立型アプレットの作成またはリンクに関しては、独立型アプレット を参照してください。 実行されるアプレットはそれぞれ Applet インスタンスによって表現され、各インスタンスでは描写されるコンテンツを保持するブラウザとの通信が行われます。アプレットが描写するコンテンツは Document で保持されます。これは、描写されるコンテンツを特定の方法で表示するメカニズムです。 通常はドキュメントを作成する必要はなく、アプレット ファイルをブラウザにロードするときに自動的に作成されます。ブラウザ内でアプレットとその Document がどのように動作するかを理解するには、「アプレットの表示」と「アプレット クラス」のセクションを参照してください。