このウィキの読者になる
更新情報がメールで届きます。
このウィキの読者になる
カテゴリー
タグ
最近更新したページ
最新コメント
メニューバーA
フリーエリア
Wiki内検索

Script-fuにできることできないこと

これは何?

GIMPの標準実装の実行環境Script-fuの落とし穴をつづっていくページです。
実際使えると聞いて、試すと使えない関数多すぎ・・・

対応表

基本的にコーディング上基礎的な部分のみです。
下の参考資料で未実装となっているものは除いています。
また、こちらがこれはないだろうというものは加えています。
目的SIODGIMP実装Perl相当
定義
変数定義(define variable value)local my
ルーチン定義(define (procedure-name arg1 arg2 ...)
form1
form2
...)
sub prosedure{my ($a,$b)=@_;}
関数定義(無名?)(lambda (arg1 arg2 ...) form1 form2 ...form4ReturnValue)sub prosedure{my ($a,$b)=@_;return A}
関数定義(無名?)局所変数付(let ((x 10)
(y 20))
(+ x y)...form4ReturnValue)
sub prosedure{my ($a,$b)=@_;return A}
関数定義(無名?)局所変数付宣言時計算可 (let* ((x 10)
(y (+ x 10)))
(+ x y)...form4ReturnValue)
sub prosedure{my ($a,$b)=@_;return A}
代入
代入(set! variable value)$x = $y
String
文字列結合(string-append str1 str2 str3 ...).
文字列⇒数値変換(number->string x base width precision)-
文字列切り出し(substring str start end)substr(string, offset, length)
文字列切り出し+判定(substring-equal? str str2 start end)-
文字列長(string-length str)length($str)
文字列分離(strbreakup string sep)split(/sep/,$string)
配列結合⇒文字列(unbreakupstr list sep)join(sep,@list)
文字列のうち初めてKeyの現れる文字数(string-search key str)index(str, key, offset)
文字列置換未定義×tr/文字列1/文字列2/
正規表現未定義×いろいろ
ハッシュ作成(crypt key salt)×crypt( $key , $salt )
アルファベット小文字へ変換(string-downcase str)-
アルファベット大文字へ変換(string-upcase str)-
半角空白文字除去trim(string-trim str)-
半角空白文字除去trim(string-trim-left str)-
半角空白文字除去trim(string-trim-right str)-
uriエンコード(url-encode str)×-
uriデコード(url-decode str)×-
制御文
条件式 (if predicate-form true-form false-form)if(){}else{}
多数分岐(cond clause1 clause2 ...)switch case
繰り返し(これだけ!)(while pred-form form1 form2 ...)while
処理終了(quit)exit
システム時間(runtime)time?
逐次実行ではなくて、実行ブロックの宣言。(begin form1 form2 ...formReturnValue)-
エラーハンドリング?本当?
Throwされたエラーをキャッチ(*catch tag body ...)evel()
オブジェクトをタグに紐付けてエラーとしてThrow(*throw tag value)die
エラーメッセージ表示?(error message object)-
値判別
数値か?(number? x)-
文字列か?(string? x)-
Nullか?(null? x)eq ''
同じオブジェクトOR数値か?(eqv? x y)eq ''
同じオブジェクトか?(eq? x y)eq ''
同値のオブジェクトか?(equal? x y)eq ''
and(and form1 form2 form3 ...)&&
or(or form1 form2 ...)||
not(not form1 form2 form3 ...)
配列関係一次元のみOK
配列の作成(list 1 3 5 7)@array={1,3,5,7}
配列のx番目を返す
ただしByteList専用
(aref array x)$array[x]
配列のx番目を返す
通常用
(nth x array)$array[x]
配列を結合(append l1 l2 l3 l4 ...)@x= (@y, @z)
配列yの先頭にxを追加、ただしListもOK(cons x y)unshift(@y,x)
配列hogeの要素数(length hoge)$#hoge
配列を逆方向にする(reverse x)reverse @x
配列の先頭の要素のみ取得(car x)$array[0]
配列の先頭の要素のみ取得(first x)×$array[0]
配列の先頭以外の配列(cdr x)shift(@x)
配列の先頭以外の配列(rest x)×shift(@x)
配列の最後の要素(last list)$array[$#array - 1]
配列の指定要素以降の配列(memq key list)-
配列の指定要素以降の配列(memv key list)-
配列の指定要素以降の配列(member key list)-
配列の最後尾以外の配列(butlast x)pop(@x)
配列のコピー(copy-list x)@x=@y
配列の特定要素を消去(delq element list)-
配列のソート(qsort list predicate-fcn access-fcn)
(qsort '((3 a) (2 b)) < car) ((2 b) (3 a))
sort(@x)
配列の特定型要素を取り出し(subset pred-fcn list)
(subset number? '(1 b 2 c)) => (1 2)
-
関数
標準出力(print x)ptint x
標準出力(prin1 object stream)ptint x
現在時間取得(秒数 1970-0-1-01 00:00:00から)(realtime)time()
objectの型を取得、
tc_nil:NULL
(typeof x)-
表現をScheme式として評価(eval expression environment)eval(expression )
数値演算
乱数種設定(srand seed)srand(time)
乱数(rand modulus)rand(modulus)
ディレクトリ操作
ディレクトリを開く(opendir path)×opendir(DIR path)
ディレクトリを閉じる(closedir stream)×closedir(DIR)
ディレクトリを読む(readdir directory-stream)×readdir(DIR)
現在のパスを取得(getcwd)×rand(modulus)
パスを移動(chdir path)×chdir(path)
ディレクトリ作成(mkdir path mode)×mkdir(path )
ディレクトリ削除(rmdir path)×rmdir(path )
ファイル操作
ファイルストリームを取得、モードはw,rでないファイルを判別できない。(fopen path mode)open(FILE "mode path" )
ファイルストリームを閉じる(fclose stream)close(FILE )
ファイルストリームの現在位置を取得(ftell stream)tell(FILE )
ファイルカーソルの位置を設定、信用ならない(fseek file offset direction)
SEEK_CUR, SEEK_END or SEEK_SET
seek(file offset direction)
ファイルストリームから文字列を読み込む(read stream)read(FILE )
ファイルストリームから文字列を読み込む、最大size分32bit-1byteまで。(fread size stream)read(FILE )
ファイルストリームから文字を一文字読み込む(getc stream)getc(FILE )
EOF(eof-val)eof
ファイルストリームに一文字書き込む(ungetc char stream)-
ファイルストリームから一行読み込む(gets stream)×-
ファイルストリームから一行読み込む(readline stream)×-
ファイルストリームに書き込む(writes stream data1 data2 data3 ...)write(FILE )
ファイルストリームに書き込む(fwrite data stream)write(FILE )
ファイルストリームに一文字書き込む(putc char stream)write(FILE )
ファイルストリームに文字列を書き込む(puts string stream)write(FILE )
ファイルストリームを再読み込み?(fflush stream)-
ファイル削除(unlink path)×unlink(path)
ファイル削除(delete-file path)×-

間違っていたらごめんなさい。

生きてると思しき命令群

(fast-read state)
(fast-print object state)
(gc)
(gc-info item)
(gc-status [flag])
(apropos substring)
(href table key)
(hset table key value)
(larg-default list index default-value)
(lkey-default list index default-value)
(lref-default list index default-fcn)
(make-list length element)
(nconc l1 l2)
(trace fcn1 fcn2 ...)
(untrace fcn1 fcn2 ...)
(get object key)
(putprop object value key)
(setprop obj key value)
(load fname noeval-flag search-flag)
(require path)
(fast-load path noeval-flag)
(fast-save filename forms nohash-flag comment-string)
(verbose arg)


参考データ

Gimp wiki - Script-Fu/SIODProcedure
こちらは参考データとしてあるだけですので実装の有無までは確認していない模様。

SIOD: Scheme In One Defune,Reference Appendix
多分上の元ネタです。

検証バージョン

2.2.13のWin版

調査方法

Script-fuコンソールで実行。
命令部分が未宣言の変数でエラーとならない場合をとりあえず実装済みとみなす。


ゲイツOSなんか見捨てろなんて言わないでください。
世の中そうは行かないですから・・・ねぇ。
2007年08月09日(木) 02:02:24 Modified by ryunosinfx




スマートフォン版で見る