3. Zasvěcení do Script-Fu

V této části vás provedeme základy jazyka Scheme, potřebnými pro zvládnutí umění Script-Fu, a napíšeme společně šikovný skript, který se může stát vaším platným pomocníkem při práci s Gimpem. Náš skript si vyžádá zadání textu a vytvoří nový obrázek s tímto textem, o rozměrech, které textu přesně odpovídají. Pak skript vylepšíme o možnost nastavení prázdných okrajů okolo textu. Nakonec vám poradíme, jak své znalosti Script-Fu nadále prohlubovat.

[Poznámka] Poznámka

This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry.

3.1. První krůčky s jazykem Scheme

3.1.1. Start with Scheme

Scheme is a dialect of the Lisp family of programming languages. GIMP uses TinyScheme, which is a lightweight interpreter of a subset of the so-called R5RS standard.

Jako první je nutno pochopit, že:

Všechny výroky jsou ve scheme uzavřeny v kulatých závorkách ().

Druhým důležitým pravidlem je:

Jméno funkce či operátor je v závorkách vždy na prvním místě, zbylé položky jsou parametry funkce.

However, not everything enclosed in parentheses is a function — they can also be items in a list — but we'll get to that later. This notation is referred to as prefix notation, because the function prefixes everything else. If you're familiar with postfix notation, or own a calculator that uses Reverse Polish Notation (such as most HP calculators), you should have no problem adapting to formulating expressions in Scheme.

Třetí důležitá věc je:

Matematické operátory jsou rovněž považovány za funkce, a proto jsou v matematických výrazech uváděny na začátku.

Je to logický důsledek zmíněné prefixové notace.

3.1.2. Příklad prefixové, infixové a postfixové notace

Here are some quick examples illustrating the differences between prefix, infix, and postfix notations. We'll add a 1 and 23 together:

  • Prefix notation: + 1 23 (the way Scheme will want it)

  • Infix notation: 1 + 23 (the way we normally write it)

  • Postfix notation: 1 23 + (the way many HP calculators will want it)

3.1.3. Procvičování Scheme

In GIMP, select FiltersDevelopmentScript-FuScript-Fu Console from the main menu. This will start up the Script-Fu Console window, which allows us to work interactively in Scheme.

3.1.4. Okno Script-Fu konzole

At the bottom of this window is a text entry field for commands. Here, we can test out simple Scheme commands interactively. Let's start out easy, and add some numbers:

(+ 3 5)

Zapsáním tohoto příkazu a stisknutím klávesy Enter získáte v hlavním poli konzoly očekávaný výsledek 8.

Obrázek 13.1. Use Script-Fu Console.

Use Script-Fu Console.

The + function can take more arguments, so we can add more than one number:

(+ 3 5 6)

Tak získáme očekávaný výsledek 14.

So far, so good — we type in a Scheme statement and it's executed immediately in the Script-Fu Console window. Now for a word of caution…

3.1.5. Dávejte pozor na nadbytečné závorky

If you're like me, you're used to being able to use extra parentheses whenever you want to — like when you're typing a complex mathematical equation and you want to separate the parts by parentheses to make it clearer when you read it. In Scheme, you have to be careful and not insert these extra parentheses incorrectly. For example, say we wanted to add 3 to the result of adding 5 and 6 together:

3 + (5 + 6) + 7 = ?

Protože operátor + může sčítat seznam čísel, můžete vás napadnout zkusit následující:

(+ 3 (5 6) 7)

However, this is incorrect — remember, every statement in Scheme starts and ends with parens, so the Scheme interpreter will think that you're trying to call a function named 5 in the second group of parens, rather than summing those numbers before adding them to 3.

Správný zápis výroku by měl proto vypadat takto:

(+ 3 (+ 5 6) 7)

3.1.6. Ujistěte se, že používáte správně mezery

Pokud znáte jiné programovací jazyky, jako C/C++, Perl nebo Javu, víte, že okolo operátorů nemusíte psát tzv. bílé znaky (mezery), aby byl výraz správně zapsán:

        3+5, 3 +5, 3+ 5
      

Tyto zápisy jsou v případě C/C++, Perlu i Javy zcela správné. Nikoli však ve Scheme. Ve Scheme musí být za matematickým operátorem (nebo za jakýmkoliv jiným jménem funkce či operátorem) mezera, jinak by došlo k nesprávné interpretaci.

Zkoušejte si ve Script-Fu konzoli jednoduché matematické výrazy, dokud výše popsaná pravidla nebudete mít dokonale v krvi.