1

レイヤーをファイルにエクスポートするGIMPスクリプトを書いています。エクスポートするファイル名の形式を各要素のチルダ文字の組み合わせで提供できるユーザー指定可能なフィールドを提供したいと思います(つまり、レイヤー「bar」と「baz」を含む「foo」という名前のファイル。出力ファイル名の形式は「〜f-〜l.png」で、「foo-bar.png」と「foo-baz.png」を出力します。Luaでこれを行う方法を知っています:

local nameformat = "~f-~l.png"
local function layer_export_name(filename, layername)
  return string.gsub(nameformat, '~.', {f=filename, l=layername})
end

GIMPのスキームでこれを行うにはどうすればよいですか?

繰り返しますが、文字列内のキーワードを置き換える必要があります。すでに定義した文字列を作成する関数は必要ありません。

4

2 に答える 2

4

これを行うための標準的なScheme手順はありません。私は次の非効率的ですが移植可能な手順を書きました:

(define (expand-keywords string tokens)
  (let loop ((slist (string->list string))
             (in-replace-mode #f)
             (result ""))
    (if (not (null? slist))        
        (let ((c (car slist)))
          (cond (in-replace-mode
                 (let ((token (car (cdr (assoc c tokens)))))
                   (loop (cdr slist) #f (string-append result token))))
                ((char=? c #\~)
                 (loop (cdr slist) #t result))
                (else 
                 (loop (cdr slist) #f (string-append result 
                                                     (make-string 1 c))))))
        result)))

使用例:

> (expand-keywords "~f-~l.png" '((#\f "vijay") (#\l "9")))
"vijay-9.png"
> (expand-keywords "~f-~l.~e" '((#\f "vijay") (#\l "10") (#\e "jpg")))
"vijay-10.jpg"

スキームの実装で文字列をインプレースで変更する手順が提供されている場合は、の代わりにそれを使用してstring-appendください。

于 2011-06-28T07:34:11.370 に答える
0

大きな警告:私はSchemeをたくさん知っていますが、GIMPスキームはあまり知りません-どうやらTinySchemeです。たとえば、ラケットでは、次のように記述します。

(format "~a-~a.png" filename layername)

... layernameが文字列であると仮定します(これが当てはまるかどうかは、あなたの質問からはわかりません)。

TinySchemeにはラケットの「フォーマット」がないのではないかと思いますが、ほぼ確実に「string-append」があります。

(string-append filename "-" layername ".png")

layernameが文字列の場合は、次のようにnumber->string関数も使用することをお勧めします。

(string-append filename "-" (number->string layername) ".png")
于 2011-06-27T22:08:39.670 に答える