1

我正在编写一个 GIMP 脚本来将图层导出到文件中。我想提供一个用户可指定的字段,他们可以在其中提供要导出的文件名的格式,以及每个元素的波浪号字符组合(即一个名为“foo”的文件,带有“bar”和“baz”层,与输出文件名格式为“~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"

如果您的 Scheme 实现提供了就地修改字符串的过程,请使用它而不是string-append.

于 2011-06-28T07:34:11.370 回答
0

大警告:我知道很多方案,但不是很多 GIMP 方案——显然是 TinyScheme。例如,在 Racket 中,你会写

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

...假设 layername 是一个字符串(我不清楚你的问题是否是这种情况)。

我猜你在 TinyScheme 中没有球拍的“格式”,但你几乎可以肯定有“字符串附加”:

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

如果 layername 是一个字符串,你可能还想使用 number->string 函数,像这样:

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