Opis

Projekt zakończony

Paweł Marek, pmarek@student.agh.edu.pl

PrologEns

Kolorowanie składni języka Prolog dla GNU Enscript. Patrz realizacja dla 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 <p.marek@student.agh.edu.pl>
 */

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

Materiały

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

pl/miw/miw08_prologens.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0