アプレット
アプレットのトップレベルには、テキストを記述できます。記述されたテキストは、以下のような簡単なルールにそってブラウザに表示されます。
- トップレベルに書かれたテキストはブラウザに表示される。
- 複数の空白は1つとみなされる。
- テキストを含まない行に続くテキストは新しい段落に表示される。
HTMLファイルを読み込んだブラウザのような動作です。トップレベルのテキストなどの各種表現を行うために、テキスト書式(テキストプロシージャ)と呼ばれるCurlの式が用意されています。文字書式(text)、パラグラフ書式(paragraph)、リスト(itemize/enumerate)、テーブル(table)、リンク(link)、イメージ(image)などがあります。
もう1つ、アプレットのトップレベルには、Curlの式が記述できます。トップレベルに書かれた式を「トップレベルの式」と呼びます。式には、CurlのコマンドかCurlの一連の処理が書かれたコードブロックが記述されます。
変数を定義するサンプルコードを示します。
{curl 7.0 applet} {curl-file-attributes character-encoding = "shift-jis"} {let a:int = 100} || (1) トップレベルで定義された変数 {do let a:int = 200 || (2) コードブロック内で定義された変数 let b:int = 100 || 同上 } a = {value a} b = || {value b} || エラー
(1)は、トップレベルの式でCurlのコマンドが実行されています。この変数はトップレベルで実行されたとみなして、変数はトップレベル以下ならどこでも利用できる変数(グローバル変数)になります。
(2)は、コードブロックの中でCurlのコマンドが実行されています。コードブロックには、スコープの範囲となります。そして、コードブロックの中はトップレベルの下のレベルになります。コードブロック内で定義された変数は、定義されたコードブロックより下のレベルで有効な変数(ローカル変数)となります。
ここで、コードブロック内で、let/set/defを使う場合は、{ } で囲まないのが作法になりますので注意してください。囲ってもエラーにはなりませんが、囲まないことが推奨されています。トップレベルの式では、Curl式であることを示すために、{ } で囲まなければなりません。
まとめると、アプレットでは、テキストを描画する領域であるデフォルトビューがブラウザの中に用意されます。そこに、トップレベルで書かれたテキストが表示され、トップレベルの式の戻り値が表示されることになります。
独立型アプレット
次に、独立型アプレットです。独立型アプレットでは、自分で描画の土台となるビューを用意する必要があります。明示的にビューを生成して、そこに表示させます。IDEで自動的に生成されるコードは以下のようになります。
{curl 7.0 applet} {curl-file-attributes character-encoding = "shift-jis"} {View || この{Frame}を置き換えて使用してください {Frame width = 8cm, height = 8cm}, visibility = "normal", {on WindowClose do {exit} } }
このコードのトップレベルにテキストをどうなるか書いてみましょう。
{curl 7.0 applet} {curl-file-attributes character-encoding = "shift-jis"} 独立型アプレットでテキストを書きました。 {View || この{Frame}を置き換えて使用してください {Frame width = 8cm, height = 8cm}, visibility = "normal", {on WindowClose do {exit} } }
実行しても、エラーにはなりませんがテキストは何も表示されません。アプレットと同じようにトップレベルのデフォルトビューに書いたとしても、そのビューは表示されませんので、結果として何も表示されないのでしょう。
ビューを生成して表示するためには、プログラマがViewを生成するCurlのコードを書く必要があります。コード内はコードブロックになりますのでトップレベルではありません。独立型アプレットでは、トップレベルのテキストは機能しないことになります。