独立型アプレット

要約:
  • 独立型アプレットは、独立型アプリケーションとしてユーザーに表示されます。
  • 独立型アプレットでは .dcurl 拡張子および text/vnd.curl.dcurl MIME 型が使用されます。
  • 独立型アプレットには、デフォルトの View はありません。
  • 独立型アプレットは一時停止状態になることはありません。
  • 独立型アプレットでは、exit を明示的に呼び出す必要があります。
  • 独立型アプレットでは、URL の先頭で特別な curl://launch/ プレフィックスを使用する必要があります。
通常、Curl アプレットはWeb ブラウザ内でエンド ユーザーに表示されます。独立型アプレットとして実行する場合や、独立型アプリケーションとして表示される場合には、アプレットはより優れたユーザ環境を提供できる場合があります。独立型アプレットは通常のアプレットとほぼ同じ手法で、記述したり、展開したりすることができます。この章では、開発者とエンド ユーザーの両方の視点から、独立型アプレットとブラウザ指向型アプレットについて説明します。

ウィンドウの制御

通常のアプレットは、アプレット View の内部に表示されます。これは、Web ブラウザ ウィンドウ内に組み込まれています。アプレットは、この View を作成したり、破棄したりすることはできません。独立型アプレットは、ブラウザ ウィンドウの中では実行されないため、このような View を持ちません。通常、独立型アプレットがユーザと対話的に機能するためには、1 つ以上の View を作成する必要があります。独立型アプレットでは、アプレットによって作成される、他のすべての View と同様に、サイズ、位置、Views などのすべて可視性を、完全に制御できます。

アプレットの有効期間

通常のアプレットは Web ブラウザ内で表示されるため、ユーザがアプレット外を閲覧した場合は、アプレットは 一時停止状態になります。独立型アプレットが一時停止状態になることはありません。登録された一時停止プロシージャはアプレットが終了するときに呼び出されることに注意してください。register-suspend-proc を参照してください。
エンド ユーザーが、アプレットを実行しているブラウザ ウィンドウを閉じると、アプレットは強制的に終了します。独立型アプレットは、独自の View を追跡する必要があります。そして、ユーザが主要 View、またはすべての View を閉じたときに exit を呼び出すか、独立型アプレットの実行を停止するために、他の操作を実行しなければなりません。どの時点で終了するのが適切かは独立型アプレットによって異なります。たとえば、ワード プロセッサ アプリケーションでは、通常複数のウィンドウを開くことができますが、開いたウィンドウがすべて閉じられるまで、アプリケーション自体は終了しません。
Curl® IDE を使用して独立型アプレットを作成する場合、IDE が .dcurl ファイルにコードを追加します。このコードは、exit を呼び出す WindowClose イベント用のイベント ハンドラー付き View を作成します。

独立型アプレットの配置

独立型アプレットは、拡張子に .dcurl を、MIME タイプに text/vnd.curl.dcurl を使用することを除き、通常のアプレットとほぼ同様に配置されます。ユーザーが独立型アプレットを閲覧すると、独立型アプレットが起動されます。非標準の MIME タイプを持った HTTP URL をベースとする外部アプリケーションの起動が求められた場合、その動作はブラウザによって異なります。
注意: 独立型アプレットでは、URL の先頭で特別な プレフィックス curl://launch/ を使用する必要があります。たとえば、URL が http://www.example.com/start.dcurl である独立型アプレットへのリンクを作成する場合には、ユーザーは、curl://launch/http://www.example.com/start.dcurl を使用する必要があります。 ブラウザ内で独立型アプレットを実行する場合も、URL の先頭で curl://launch/ を使用する必要があります。
プレフィックスの次には Url を置く必要があります。 例えば、相対リンクを作成する場合は次の形式を取ります。
{url "curl://launch/" & {url "start.dcurl"}}
いくつかの Linux システムでは、curl://launch/ プレフィックスは、 Curl のソースコード内にあるリンクのみで正しく動作します。 いくつかの Linux ブラウザは curl: プロトコルを直接処理できないため、 HTML ファイルまたはその他のブラウザのアドレスフィールドで curl://launch/ を使用すると、エラーが発生する場合があります。
Windows システム上で、Internet Explorer を使用する際、 curl://launch/ プレフィックスの後に続くURLの 中で非ASCII文字 '%' でエンコードされている値のみがデコードされますので、 URL内の '%' エンコード値には注意が必要です。

複数の起動試行

ホスト プラットフォーム上でネイティブ アプリケーションと同様に動作可能であることは、独立型アプレットの 1 つの特徴です。ネイティブ アプリケーションと同様、既定では、一度に存在する独立型アプレットのインスタンスの数は、1 つだけです。最初に起動された独立型アプレットがこのインスタンスを作成します。 最初の起動試行を含む、すべての起動試行は、最初の起動試行のインスタンスに通知します。独立型アプレットは Applet.launch-handler を指定して、全ての試行に応答することができます。起動試行ごとに、異なるクエリ、アンカー、またはその両方が使用される可能性があります。 これらのアンカーとクエリの値は、独立型アプレットから別のアクションを要求するために使用される可能性があります。
独立型アプレットで複数のインスタンスの作成を許可する場合、アプレットは Applet.allow-multiple-instances を呼び出すことができます。以降の起動動作では、独立型アプレットの一意のインスタンスを作成します。 Applet.launch-handler は、独立型アプレットの個々のインスタンスで呼び出されることに注意してください。

API の相違点

通常のアプレットと独立型アプレットが使用する API には、ほとんど違いがありません。一部の Applet メソッドは、独立型アプレットでは使用することはできませんが、逆に、Applet.allow-multiple-instancesApplet.launch-handler の両方は、独立型アプレットのみで動作します。
独立型アプレットを一時停止状態にしたり、再開したりすることはできませんが、一時停止状態のハンドラはプロセスが終了した時点で実行されます。そのため、一時停止状態のハンドラを終了処理の一部として使用できます。
独立型アプレットのドキュメントの最上位に詳述が追加されますが、アプレット View は表示されないため、ドキュメントも表示されません。また、同様の理由から、document-styleApplet.document プロシージャは、有効ではありません。
さらに、独立型アプレットはブラウザを呼び出さないため、以下も有効ではありません。
Applet.browse-url は新しいブラウザを起動し、独立型アプレットを起動したり、現在の要件を条件として、curl://launch/ URL を使用したりすることができます。Applet.browse-url-post は、独立型アプレットには実装されていません。

スクリプト

Curl スクリプトでは、コマンド ラインまたはショートカットから Curl プログラムを実行できます。 既定では、スクリプトは特権付きで実行します。 スクリプトはバッチ処理に対して便利であり、またグラフィカル ユーザ インターフェイスを提供している場合にはインタラクティブな処理をスクリプトで記述することができます。
Curl スクリプトはスクリプト ヘラルドで始まり、ファイル拡張子は .xcurl を使用します。アプレット同様に import および include を含むことができます。ファイル全体がコンパイルされ、トップ レベルの式が 1 つずつ実行されます。スクリプトでは、ストリーム stdoutstderr および stdin はシェルから取得されます。
既定の環境は、暗黙的にインポートされたパッケージ CURL.IMPLICIT.SCRIPT によって定義されます。これらの暗黙的なインポートはパッケージの暗黙的なインポートとよく似ていますが、CURL.RUNTIME.HOST-ENVIRONMENT からの CURL.SCRIPT.VARIABLESCURL.SCRIPT.PARSE-SWITCHES、および get-from-host-environment プロシージャの内容も含まれています。アプレットとは異なり、GUI Toolkit を使用するスクリプトでは CURL.GUI.STANDARD を明示的にインポートする必要があります。
スクリプトには作成しなければグラフィカル ユーザー インターフェースがない点で、独立型アプレットと似ています。スクリプトがモーダル ダイアログを表示する場合は、ダイアログが表示されている限りシステムはイベントを処理します。スクリプトでアプレットのようにイベントを処理したい場合は、最後に event-loop の呼び出しを追加し、exit を呼び出してスクリプトを終了する方法を提供してください。
次のコード例では、単純なスクリプトを作成します。このコードをコピーして script.xcurl というファイルに貼り付けます。
{curl 8.0 script}
{script
    {compiler-directives careful? = true}
}

{import * from CURL.DESKTOP.CLIPBOARD}
{import * from CURL.GUI.STANDARD}

{let cb:Clipboard = {Clipboard.get-system-clipboard}}

{let d:Dialog =
    {Dialog
        margin = 9pt,
        {VBox
            spacing = 6pt,
            
            "The clipboard contains this text:",

            {TextArea
                width = 3in, height = 2in,
                value = {cb.get-string}
            },
            {HBox
                {Fill},
                {done-button
                    {on Action do
                        {exit}
                    }
                }
            }
        }
    }
}
{d.show
    title = {hlmessage Clipboard Reader Script}
}
ディレクトリ d:\automated-build-temp\build\win32-atom\bin にある curl 実行可能ファイルにこれを引数として提供することによってスクリプトを実行します。ショートカット、または [実行...] ダイアログやバッチ ファイルなどのコマンド ライン呼び出しを使用してスクリプトを実行できます。
スクリプト名の前に -l (遅延コンパイルではない) または --unprivileged (特権による操作を許可しない) などの curl 実行可能ファイルに対するオプションを指定することができます。また、スクリプト名の後に引数を提供することができます。これらの引数は、CURL.SCRIPT.VARIABLES で定義される script-args グローバル変数を介してスクリプトで使用されます。変数 script-namescript-url および script-default-exit-value も使用できます。後者は --default-exit コマンド ライン オプションによって設定され、スクリプトを明示的に終了しない場合にシェルに返される終了の既定値を決定します。
例として、以下を script.xcurl に追加します。
{curl 8.0 script}

{import * from CURL.GUI.STANDARD}

{View
    width = 2in, height = 3in, visibility = "normal",
    {text This script was run with {value script-args.size} arguments.},
    {on WindowClose do {exit}}
}

{event-loop}
次に [実行...] ダイアログに次のように入力します。
"d:\automated-build-temp\build\win32-atom\bin\curl.exe" -l script.xcurl 1 2 3