====== Opis ====== __**Projekt zakończony**__ **Paweł Marek**, ===== PrologEns ===== Kolorowanie składni języka Prolog dla [[http://www.gnu.org/software/enscript/|GNU Enscript]]. Patrz realizacja dla [[pl:prolog:geshi_prolog|GeSHi]]. ====== Projekt ====== Poniżej zamieszczam wyniki wykonania projektu kolorowania składni języka Prolog w GNU Enscript. prolog.st /** * Name: prolog * Description: Prolog (PROgramming in LOGic) programming language. * Author: Pawel Marek */ state prolog extends HighlightEntry { /* Comments. */ /\/\*/ { comment_face (true); language_print ($0); call (c_comment); comment_face (false); } /* Comments. */ /%/ { comment_face (true); language_print ($0); call (eat_one_line); comment_face (false); } /* String constants. */ /'/ { string_face (true); language_print ($0); call (prol_string); string_face (false); } /* String constants. */ /\"/ { string_face (true); language_print ($0); call (c_string); string_face (false); } /* Symbols. */ /+|-|*|\/|\\\\|\^|<|>|=|~|:|\.|,|?|@|#|\$|&/ { keyword_face (true); language_print ($0); keyword_face (false); } /* Brackets. */ /\[|\]|\(|\)/ { function_name_face (true); language_print ($0); function_name_face (false); } /* Predicates. */ /([A-Z])([a-zA-Z0-9]*)/ { bold (true); language_print ($0); bold (false); } /* Numbers. */ /([0-9])/ { type_face (true); language_print ($0); type_face (false); } } state prol_string extends Highlight { /\\\\./ { language_print ($0); } /'/ { language_print ($0); return; } } /* Local variables: mode: c End: */ ====== Sprawozdanie ====== ==== 1. Enscript ==== Enscript konwertuje pliki tekstowe do formatu PostScript lub innego języka wyjściowego (HTML, RFT, ANSI). Program potrafi zapisać wynik swojego działania w pliku lub wysłać bezpośrednio do drukarki. Jeżeli podczas wywołania nie podano pliku wejściowego enscript przetwarza wejście standardowe (stdin). Enscript może być rozbudowywany do obsługi wielu mediów wyjściowych i posiada szereg opcji konfigurowalnych, które mogą być używane do dostosowywania wydruków do swoich potrzeb. Jednym ze sposobów wykorzystania programu jest kolorowanie składni. Enscript w najnowszej swojej wersji 1.6.4 posiada obsługę kolorowania składni kilkudziesięciu języków, m.innymi: ADA95, C, C++, Delphi, Fortran, VHDL, HTML. Moim zadaniem było dopisać definicje kolorowania składni języka Prolog. ==== 2. Highlighting rules ==== Program po zainstalowaniu umieszcza swoje pliki konfiguracyjne w /usr/local/share/enscript. Zagłębiając się dalej w strukturze katalogów /usr/local/share/enscript/hl znajdują się pliki z definicjami kolorowania składni poszczególnych języków. Między nimi znajduje się główny plik kolorowania składni enscript.st w którym znaleźć można wskazówki jak należy pisać nowe reguły. Aby sprawdzić jakie reguły podświetlania składni podsiada Enscript należy wydać polecenie: enscript --help-pretty-print Wywołanie zwraca nazwę języków, krótkie opisy i autorów reguł. Z powodu braku dokumentacji GNU Enscript dotyczących reguł podświetlania składni podczas pisania projektu korzystałem praktycznie tylko z zaleceń zawartych w pliku enscript.st oraz z analizy istniejących już reguł dla innych języków. ==== 3. Instalacja dodatku ==== Instalacja reguł podświetlania składni Prologu polega na skopiowaniu pliku prolog.st do katalogu /usr/local/share/enscript/hl gdzie znajdują się inne reguły. Program podczas działania sprawdza czy dane reguły są w katalogu i w razie problemów zgłasza błędy. ==== 4. Przykładowe użycie ==== Aby skorzystać z podświetlania składni Prologu należy wydać polecenie: enscript nazwa_pliku -Eprolog --color --output=nazwa_pliku.ps Opcja -E wskazuje jakie reguły podświetlania składni mają zostać użyte. Druga opcja --color włącza bogatsze wyniki o kolory (domyślnie wyniki są tylko pogrubiane). Ostatnia opcja --output sprawia iż wyniki zapisywane są w pliku o podanej po znaku równości nazwie. ==== 5. Testy ==== Przykładowe wyniki. Plik wejściowy: /* * family.pl * taken from Bratko, 3rd ed, ch.1, p.17 * */ parent(pam,bob). parent(tom,bob). parent(tom,liz). female(pam). female(liz). female(pat). male(tom). male(bob). male(jim). mother(X,Y) :- parent(X,Y), female(X). father(X,Y) :- parent(X,Y), male(X). Plik wynikowy: {{:pl:miw:prologens.gif|:pl:miw:prologens.gif}} ====== Materiały ====== * GNU Enscript Home Page [[http://www.codento.com/people/mtr/genscript/]] * GNU Enscript Manual Page [[http://www.codento.com/people/mtr/genscript/enscript.man.html]] * GNU Enscript v1.6.4 [[http://www.iki.fi/mtr/genscript/enscript-1.6.4.tar.gz]] * Writing New Highlighting Definitions in GNU Enscript [[http://lavica.fesb.hr/cgi-bin/info2html?(enscript)Writing%20New%20Highlighting%20Definitions]] * Output Languages in GNU Enscript [[http://lavica.fesb.hr/cgi-bin/info2html?(enscript)Output%20Languages]] * Guildelines for writing new highlighting rules for the GNU Enscript /usr/local/share/enscript/hl/enscript.st