Preprocesor dla ActionScript

Preprocesor to narzędzie, które parsuje kod źródłowy programy przed poddaniem go kompilacji. Umożliwia to np. utworzenie warunkowych fragmentów kodu, które w specyficznych sytuacjach są dołączane do pliku wynikowego. Niestety, flex nie udostępnia nam takiego mechanizmu. Możemy jednak sami podpiąć zewnętrzny preprocesor.

Proponuję do tego celu użyć np. programu cpp (C Preprocesor). Jest to chyba jeden z bardziej rozbudowanych tego typu programów. W systemach Linux jest on prawie na pewno preinstalowany, w Windows możemy go uruchomić dzięki pakietowi Cygwin. Oczywiście cpp nie jest jedynym zdatnym dla nas preprocesorem – możemy w jego miejsce zastosować inny.

OK, a więc teraz pora na mini HOW-TO – jak podpiąć cpp do FlexBuildera – wersja dla Windows:

W pierwszym kroku należy ściągnąć i zainstalować cygwin, oraz doinstalować do niego kompilator C (to właśnie w nim znajduje się cpp).

Następnie utwórz skrypt:

c:
cd c:\cygwin\bin\
 
FOR /R %1 %%F IN (*.as) DO (
	@COPY /Y "%%F" "%%F.cpp-bak"
	cpp.exe -E -P -C '%%F' -o '%%F.cpp-processed'
	@MOVE /Y "%%F.cpp-processed" "%%F"
)

i zapisz go pod nazwą cpp.bat. Utwórz drugi skrypt:

@ECHO off
 
FOR /R %1 %%F IN (*.as) DO (
	@MOVE /Y "%%F.cpp-bak" "%%F"
)

i nazwij go cpp_restore.bat.

Teraz, w FlexBuilder, w ustawieniach projektu wybierz zakładkę Builders i utwórz nowego “budowniczego” klikając w przycisk New. W okienku, które się otworzy, w polu Name: wpisz nazwę np. Preprocesor, w polu Location: wpisz pełną ścieżkę do skryptu cpp.bat, a w polu Arguments: wpisz “${project_loc}”. Zatwierdź wciskając OK.

Teraz dokładnie to samo zrób dla drugiego skryptu, podaj tylko inną nazwę np. Preprocesor – restore.

Gdy już utworzysz obydwu “budowniczych”, ustaw ich w następującej kolejności:
– Preprocesor
– Flex
– Preprocesor – restore

Zrobione. Teraz możesz już używać instrukcji preprocesora w swoim kodzie. Dokumentację do niego znajdziesz pod adresem gcc.gnu.org/onlinedocs/cpp/.

Uwaga
Jest pewna wada przedstawionego rozwiązania. Ponieważ preprocesor usuwa linie zawierające jego rozkazy, wobec tego numery linii w komunikatach o błędach ActionScript nie będą się pokrywały z rzeczywistością. Rozwiązaniem byłoby wymuszenie na preprocesorze wstawiania pustych linii w miejsce usuniętych – niestety na razie nie wiem jak to skutecznie zrobić.