三種單步執行程式的方式
- 第一種方式:只修改註冊於PDB內的函數名稱
- 第二種方式:修改成在 Console 內可一行一行執行的 Scheme 程式碼
- 第三種方式:修改成在 Console 內可一行一行執行的 Python 程式碼
本節介紹「第二種方式」,以 news-text.scm 為例
- 本節介紹單步執行的「第二種方式」,可「單行」執行的 Scheme code 。
- news-text.scm 完整的程式碼可參考 22.5 節。
- 也可到 GIMP 系統的 scripts 目錄下找到該檔案。
- 最主要修改的部份是,將「對話框接收輸入變數值」修改成「直接指定輸入變數值」。
- 先要瞭解,news-text.scm 程式碼的執行流程。
不使用 let* 改用 define
- 原本的程式使用 let* 定義與指定區域變數值。
- (let* (()()()...) ()() ...) 這樣的語法括號太多。
- 若要一行一行分析程式碼的意義,let* 語法,括號有好幾層,分析時,會造成一些干擾。
- 現在不使用 let* 改用 define 來定義與指定變數值。
如何用人工的方式判斷,左右括號對齊
- 心中有個計數器,一開始為 0 。
- 從左至右掃描程式碼,在心中默數。
- 看到左括號 ( 加 1 。
- 看到右括號 ) 減 1 。
- 掃描完,若復歸為 0 ,則表示左右括號在數量上是對齊的。
- 掃描的過程中,計數器值若為負值 ,則表示此時右括號多於左括號 ,這是也是不合理的。
- news-text.scm 以這一行 Scheme code 為例
(define grey (/ (* density 255) 100))
1 2 3 2 1 0
- news-text.scm 之中,下面這一行應該是最複雜的。
- 讀者可自行練習,判斷括號對齊與否。
(gimp-floating-sel-anchor
(car (gimp-text-fontname img text-layer
(/ (+ 20 blur-radius) 2) (/ (+ 20 blur-radius) 2)
string 0 TRUE font-size PIXELS font)))
捨棄函數 script-fu-newsprint-text,直接指定輸入變數值
- 修改成最多的地方就是下列的這部份。
- 修改後的程式碼,不再需要預先定義函數 script-fu-newsprint-text ,但是要預先設定變數名稱、變數值 。
(define (script-fu-newsprint-text string font font-size cell-size density blur-radius text-color bg-color)
(let* (
(text-ext ......)
(width ......)
(height ......)
(img ......)
(bg-layer .....)
(text-layer ......)
(text-mask ......)
(grey .....)
)
SF-STRING _"Text" "Newsprint"
SF-FONT _"Font" "Sans"
SF-ADJUSTMENT _"Font size (pixels)" '(100 2 1000 1 10 0 1)
SF-ADJUSTMENT _"Cell size (pixels)" '(7 1 100 1 10 0 1)
SF-ADJUSTMENT _"Density (%)" '(60 0 100 1 10 0 0)
SF-ADJUSTMENT _"Blur radius" '(0 0 100 1 5 0 0)
SF-COLOR _"Text color" "black"
SF-COLOR _"Background color" "white"