Script-fuにできることできないこと
これは何?
GIMPの標準実装の実行環境Script-fuの落とし穴をつづっていくページです。実際使えると聞いて、試すと使えない関数多すぎ・・・
対応表
基本的にコーディング上基礎的な部分のみです。下の参考資料で未実装となっているものは除いています。
また、こちらがこれはないだろうというものは加えています。
目的 | SIOD | GIMP実装 | 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