Gimp's scheme code to extract text from layers

Discussion of Scheme and Racket
Post Reply
christian urgese
Posts: 1
Joined: Wed Feb 08, 2017 12:57 pm

Gimp's scheme code to extract text from layers

Post by christian urgese » Wed Feb 08, 2017 1:01 pm

I'm a newbe, what goes wrong in this scheme script?
"gimp -n -i -b - <<EOF
(let* ((ff (cadr (file-glob "*.xcf" 1)))) (filename "") (image 1) (layer 0))
(while (not (null? ff))
(set! image (car (gimp-file-load RUN-NONINTERACTIVE (car ff) (car ff) )))
(set! layer (vector-ref (cadr (gimp-image-get-layers image)) 0))
(set! layers (car (gimp-image-get-layers image)))
(set! visible (car (gimp-drawable-get-visible layer)))
(set! filename (string-append (substring (car ff) 0 (- (string-length (car ff)) 4)) "_del.xcf"))

(while (>= layers 0)
(if (= visible 0) (gimp-drawable-delete layer))
(set! layer (vector-ref (cadr (layer image)) 0))
(set! layers (- layers 1))))

(gimp-file-save RUN-NONINTERACTIVE image image filename filename)
(gimp-image-delete image)
(set! ff (cdr ff))
(gimp-quit 0)


Posts: 7
Joined: Wed Jan 18, 2017 5:34 am

Re: Gimp's scheme code to extract text from layers

Post by peterlane » Fri Feb 10, 2017 5:03 pm

I don't know Gimp, but your bracketing is off.
christian urgese wrote: (let* ((ff (cadr (file-glob "*.xcf" 1)))) (filename "") (image 1) (layer 0))
For example, write the start like this:

Code: Select all

(let* ((ff (cadr (file-glob "*.xcf" 1)))) <-- you have one too many close brackets here, they should only close up to the one before 'ff'
                  (filename "") 
                  (image 1) 
                  (layer 0)) <-- leaving this one to close off the one before the one before 'ff'.
Should the sccond while loop be 'within' the first while loop, as it is now, or in sequence with it? If in sequence, you need an extra close bracket after (set! filename ...)

The close brackets before and after (gimp-quit 0) do not match anything.

I suggest you put your code into a scheme aware editor, which will match up and indent according to your brackets.

Post Reply