Tcl

ReferenceTOPKeywords

library

auto_execok
auto_import
auto_load
auto_mkindex
auto_reset
auto_qualify
tcl_findLibrary
parray
tcl_endOfWord
tcl_startOfNextWord
tcl_startOfPreviousWord
tcl_wordBreakAfter
tcl_wordBreakBefore

概要

Tclは必要とされる共用関数をTclプロシージャのライブ ラリに入れています。 Tclライブラリで定義されているプロシージャは、異なる多くのアプリケーションで使用できる一般 的なものです。 Tclライブラリの場所は info libraryコマンドにより返されます。 Tclライブラリに加えて、各アプリケーションは通 常、自分自身のサポートプロシージャのライブラリも持っています。このライブラリの場所は一般 的に$app_libraryグロバール変数の値によって与えられます。appはアプリケーションの名前です。例えば、Tkライ ブラリの場所は変数$tk_libraryに保持されています。

アプリケーションがTclライブラリのプロシージャにアクセスするにはライブラリ内のファイルinit.tclをsource文でソースに挿入しなければなりません。例えば、次のTclコマンドで

source [file join [info library] init.tcl]

アプリケーションのTcl_AppInitプロシージャからライブラリプロシージャTcl_Initを呼び出すと、自動的に処理が行われます。 init.tclのコード内で unknownプロシージャを定義します。これは下記で説明するオートロードメカニズムを使って、他のプロシージャが要求に応じて自動ロード(on-demand)できるようにするものです。

コマンドのプロシージャ

以下のプロシージャがTclライブラリで提供されています。

auto_execok cmd
auto_import pattern
auto_load cmd
auto_mkindex dir pattern pattern ...
auto_reset
auto_qualify command namespace
tcl_findLibrary basename version patch initScript enVarName varName
parray arrayName
tcl_endOfWord str start
tcl_startOfNextWord str start
tcl_startOfPreviousWord str start
tcl_wordBreakAfter str start
tcl_wordBreakBefore str start
auto_execok cmd
名前がcmdの実行可能ファイルか、あるいは組込み式シェルが存在するかを判定します。存在すれば、cmdによって指定された実行可能ファイル、または組込み式のシェルを実行するために execに渡される引数のリストを返します。存在しなければ空文字列を返します。このコマン ドは(PATH環境変数で与えられます)現在の検索パス内のディ レクトリで、その中にcmdという実行可能ファイ ルが存在するか検査します。Windowsプラットホームでこの検索は execコマンドと同様にディレクトリとファイル拡張子によって拡張されます。 auto_execはauto_execsという配列で前回の検索に関する情報を保存しておきます。これにより以降に同じcmdに対するパス検索のための重複呼び出しを防止します。コマンド auto_resetauto_execokにキャッシュされた情報を廃棄させるためのコマンドです。

auto_import pattern
auto_importpatternに指定されたインポートコマンドが、オートロードライブラリにあるかどうかを判定します。namespace importの間に呼び出されます。あると判断した場合には、該当コマンドは、インタープリタがインポートリンクを作成する際に利用できるように、ロードされます。 該当コマンドがオートロードライブラリにない場合には、auto_importは何もしません。パターンマッチングはnamespace importのマッチングルールに従って行われます。

auto_load cmd
本コマンドはcmdという名前のTclコマンドの定義をロードすることを試みます。これを行うために、1つ以上のディレクトリのリストであるオートロードパスを検索します。オートロードパスは、存在するならグローバル変数 $auto_pathで与えられます。 $auto_path変数が存在しなければ、 TCLLIBPATH環境変数に存在すれば使われます。両方存在しなければ、オートロードパスは単にTclライブラリディレクトリだけになります。オートロードパス内の各ディレクトリの中には、tclIndexファイルが存在しなければなりません。(tclIndexファイルには)そのディレクトリで定義されている1つ以上のコマンドとそのコマンドをロードするために評価するスクリプトが記述されています。 tclIndex ファイルはauto_mkindexコマンドによって生成されます。インデックスファイル内でcmdを見つかると、適切なスクリプトがそのコマンドを作成するために評価されます。 auto_loadコマンドはcmdが作成されたら1を返します。このcmdのインデックスエントリが存在しないか、スクリプトには実際にはcmdを定義していない場合は(例、インデックスの情報が古くなっている)0を返します。スクリプトの処理中にエラーが発生し場合、エラーが返されます。 auto_loadはインデックス情報を一度だけ読込み、配列auto_indexに保存します。以降のauto_load呼び出しではインデックスファイルを再読込みせずに配列でcmdを確認できます。キャッシュされたインデックス情報はコマンドauto_resetで削除できます。削除すると次のauto_loadコマンドはディスクからインデックスデータベースを再読込しなければなりません。

auto_mkindex dir pattern pattern
auto_load を使用するために適切なインデックスを作成します。このコマンドはdirを検索して、pattern引数の何れかにマッチ(マッチングはglobコマンドで行われる)するすべてのファイルを要求します。マッチしたすべてのファイルの中で、定義されているすべてのTclコマンドプロシージャのインデックスを生成し、インデックス情報をdirtclIndexというファイルに格納します。 パターンが与えられない場合、*.tclのパターンが仮定されます。例えば、コマンド
auto_mkindex foo *.tcl

はサブディレクトリfoo内のすべての.tclファイルを読込み、新しいインデックスファイルfoo/tclIndexを生成します。

auto_mkindexはTclスクリプトをサブインタープリタに渡して解析します。同時に実行されるprocと名前空間コマンドを監視します。拡張としてauto_loadインデックスに入れる他のコマンドを登録するために auto_mkindex_parserパッケージを使うことができます。これがどのように機能するかを理解するためにはauto.tclを参照してください。

auto_mkindex_oldはTclスクリプトをあまり洗練されていない方法で解析します。先頭にprocという単語を持つ行はプロシージャ定義であると仮定されます。そして行の次の単語がプロシージャの名前とみなされます。この方法で見つからなかったプロシージャ定義は(例、procの前にスペースがある)インデックスを付けられません。ユーザーのスクリプトがグローバルな初期化コードや$, *, [, または]等の特別な文字のような「危険な」コードを含む場合、auto_mkindex_oldを使用したほうが安全です。

auto_reset
auto_execokauto_loadによってキャッシュされている情報を廃棄します。この情報は次に必要になったときにディスクから再び読込みされます。 auto_resetは同時に、オートロードインデックスにリストされているすべてのプロシージャを削除します。したがってインデックスの新しいコピーが次に使われるときにロードされます。

 
auto_qualify command namespace
command の完全に修飾された名前のリストを計算します。 このリストは標準のTclインタープリタがコマンド検索のためにたどるパスを反映します。最初に現在のネームスペースにおけるコマンドを検索し、その後、グローバルネームスペースにおけるコマンドを検索します。従って、command が相対的で、かつnamespaceが::ではない場合、返されたリストは2つの要素を持ちます。1つは、namespace ネームスペースにおけるコマンドであったようなnamespace に制限されたcommand で、もう1つはグローバルネームスペースにおけるコマンドであったのようなcommand です。そうでない場合はcommand のどちらかが絶対的 ( ::で始まる)で、またはnamespace::であれば、リストはグローバルネームスペースにおけるコマンドであったかのようにcommand のみを含みます。

Auto_qualifyはTclにおけるオートロード機能で使われ、pkgIndex.tclのようなインデックスオートロード、及び実行時の関数のオートロード両方を行います。

tcl_findLibrary basename patch initScript enVarName varName
これは、初期化の間の拡張を使う、標準の検索プロシージャです。この拡張はこのプロシージャを呼出し、いくつかの標準のディレクトリから自分自身のスクリプトライブラリを探します。ライブラリディレクトリの名前の最後のコンポーネントは通 常はbasenameversion ( 例えば、tk8.0 )ですが、それは階層における"library"であることもあります。initScriptファイルはいったん発見されればインタープリタに挿入(source)されます。このファイルが発見されたディレクトリはグロバール変数varNameに格納されます。この変数が既に(例えば、アプリケーション初期化の間にCコードによって)定義されていた場合、この検索は行われません。そうでない場合、この検索は、次のディレクトリで行われます。環境変数enVarNameに指定されたディレクトリ、Tclライブラリディレクトリ関連のもの、標準のインストールbinやbin/archの実行可能ファイル、現在の構造ツリーにおける実行可能ファイル、並列のの構造ツリーにおける実行可能ファイルです。

parray arrayName
配列arrayNameの全ての要素の名前と値を標準出力に出力します。ArrayName、parrayの呼出し側からアクセス可能な配列でなければなりません。この配列はローカルである場合もあり、グローバルである場合もあります。

tcl_endOfWord str start
文字列str内の開始インデックスstartの後ろにある単語終端(end-of-word)の位 置のインデックスを返します。単語終端位置とは、開始位置の後の最初の単語の後ろにある、最初の「単語構成文字でない文字」のことを指します。開始位 置の後に単語終端位置が存在しない場合は-1を返します。 Tclが文字が単語構成文字かどうかを、どのように判定するかについての詳細情報は後述のtcl_wordcharstcl_nonwordcharsの記述を参照してください。

tcl_startOfNextWord str start
文字列str内の開始インデックスstartの後ろにある単語始点(start-of-word)の位 置のインデックスを返します。単語始点位置とは、開始位置の後の最初の単語を構成する文字のことを指します。開始位 置の後に単語始点位置が存在しない場合、-1を返します。

tcl_startOfPreviousWord str start
文字列str内の開始インデックスstartの前にある単語始点の位置のインデックスを返します。開始位 置の前に単語始点位置が存在しないと-1を返します。

tcl_wordBreakAfter str start
文字列str内の開始インデックスstartの後にある単語境界の位置のインデックスを返します。与えられた文字列の開始位 置の後に境界が存在しなければ、-1を返します。返されたインデックスは境界を構成するペアの2番目の文字を参照します。

tcl_wordBreakBefore str start
文字列str内の開始インデックスstartの前にある単語境界の位置のインデックスを返します。与えられた文字列の開始位 置の後に境界が存在しなければ、-1を返します。返されたインデックスは境界を構成するペアの2番目の文字を参照します。
 

変数

以下のグロバール変数はTclライブラリ内のプロシージャにより定義、 使用されます。

auto_execs
auto_index
auto_noexec
auto_noload
auto_path
env ( TCL_LIBRARY )
env ( TCLLIBPATH )
tcl_nonwordchars
tcl_wordchars
unknown_pending
auto_execs
auto_execokにより、特定のコマンドが実行可能ファイルとして存在するかどうか、に関する情報を記録するために使用されます。

auto_index
auto_loadによりディスクから読込まれたインデックス情報を保存するために使用されます。

auto_noexec
何らかの値が設定される場合、unknownはどんなコマンドにも auto-execを試みません。

auto_noload
何らかの値が設定される場合、unknownはどんなコマンドにも auto_loadを試みません。

auto_path
本変数が設定される場合、auto_load操作の時に検索するディレクトリを与える正当なTclリストでなければなりません。本変数は起動の間に初期化され、順番にTCLLIBPATH環境変数、$tcl_library変数で指定されたディレクトリ、$tcl_libraryの親ディレクトリ、$tcl_pkgPath変数にリストされたディレクトリを含みます。

env ( TCL_LIBRARY )
本変数が設定される場合、ライブラリスクリプトを含むディレクトリの位置を指定します(この変数の値はコマンド info libraryにより返されます) 。この変数が設定されない場合はディフォルト値が使用されます。

env ( TCLLIBPATH )
本変数が設定される場合、auto_load操作時に検索するディレクトリを与える正当なTclリストでなければなりません。プラットフォームに関係なく"/"をパス区切りとして使い、ディレクトリはTclフォーマットにしたがって指定されなければなりません。この変数はauto_path変数を初期化するときしか使われません。

tcl_nonwordchars
本変数は正規表現を含み、ある文字が単語の構成部分であるかどうかを識別するためにtcl_endOfWordのようなルーチンで使用されます。パターンが文字にマッチする場合、その文字は単語を構成しない文字であるとみなされます。 Windowsプラットフォームでは、スペース、タブ、改行が構成しない文字であるとみなされます。 Unixでは、数字、英字、アンダースコアを除く全ての文字が単語を構成しない文字とみなされます。

tcl_wordchars
本変数は正規表現を含み、ある文字が単語の構成部分であるかどうかを識別するためにtcl_endOfWordのようなルーチンで使用されます。パターンが文字にマッチする場合、その文字は単語構成文字であるとみなされます。 Windowsプラッ トフォームでは、単語はスペース、タブ、改行を除く文字で構成されます。 Unixでは、単語は数字、英字、アンダースコアで構成されます。

unknown_pending
本変数はunknownによって、それが動作していることを示すために設定されます。これはunknownが無限に再帰呼び出されるエラーを検出するため使用されます。本変数はunknownが制御を返す前にクリアされます。

参照

info, re_syntax

キーワード

auto-exec, auto-load, library, unknown, word, whitespace


Copyright © 1991-1993 The Regents of the University of California. Copyright © 1994-1996 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.