TGIF FAQ – TGIF Format pliku

Original: http://bourbon.usc.edu/tgif/faq/format.html

Czy specyfikacja obj / sym formacie TGIF opublikowany gdziekolwiek?

Specyfikacja tylko „ “ w formacie pliku TGIF (obj / sym) znajduje się w pliku o nazwie „tgif.pl“, który jest częścią dystrybucji źródłowej TGIF. To nie jest plik Perl; zamiast tego, jest to plik zawierający kod Prolog. Jeśli wiesz, Prolog, powinno być dość łatwe do postać rzeczy. Jeśli nie wiesz, Prolog, poniżej znajduje się krótki opis, w jaki sposób czytać „tgif.pl“. Wielkość „tgif.pl“ jest duża, ponieważ zawiera ona informacje o wszystkich wersjach TGIF obiektów. To również sprawia, że opis formatu pliku trochę wielkiego zaangażowania.

Notacja, Notation, notacja …

Każdy TGIF obiekt jest reprezentowany jako Prolog „pojęcie“, która ma postać

funktor (arg1, arg2, …, argN)

gdzie N jest nazywana „arity“ terminu. Każdy obiekt najwyższego poziomu kończy z okresem bezpośrednio po określeniu określającego przedmiot. Innym ważnym konstruktem jest Prolog „lista“, który ma następującą postać:

[term1, TERM2, …, termK]

gdzie K jest długością listy (który może być 0). Należy pamiętać, że argument, w perspektywie może być lista.

Wreszcie, linia, która zaczyna się od% jest komentarz i zmienne w Prologu nie muszą być zadeklarowane.Nazwa zaczyna się albo litera, lub znakiem podkreślenia jest zmienna.

Wersja pliku …

Pierwsza linia w TGIF pliku jest komentarz, który zawiera informacje o wersji na temat TGIF, która zapisuje plik.Druga linia (który jest pierwszym obiektem) w TGIF pliku jest obiekt stanu (funktor jest termin, którego stan).2nd argument terminu państwa nazywa się wersja pliku pliku. Spójrzmy na przykładowy plik generowany przez TGIF:

% TGIF 2,16-p12
stan (0,32,300,0,0,0,16,1,3,1,1,0,0,3,0,1,1 „Times-Roman“,
0,20,0,0,0,10,0,0,1,1,0,16,1,0,1,1,1,1,1089,1407).
%
% @ (#) $ Header: /mm/src/tgif/httpd/faq/RCS/format.html,v 1.3 17.08.2005 06:21:25 William Exp William $
W%%%
%
strony (1 „“).
tekst („niebieski“, 96,64, „Times-Roman“, 0,20,1,1,0,1,94,22,2,0,18,4,0,0,0,0 [
„Hello World“]).

(Faktycznie, nie ma w pętli w linii stanu. Jest owinięty wokół tutaj, więc jest to łatwiejsze do odczytania.)

Wersja pliku jest 32. w pliku są 3 powyżej najwyższego poziomu obiektów (w tym obiekcie państwowej). Można powiedzieć, że są obiektami najwyższego poziomu, ponieważ jeśli dopasować nawiasach bezpośrednio po albo nazwa stanu, strona, lub tekstu, nawiasach zamykania natychmiast następuje okres.

Tekst Obiekt Przykład …

Zobaczmy, jak można analizować obiekt tekstowy za pomocą informacji w „tgif.pl“.

Najpierw znajdź sekcję „tgif.pl“ z klauzul, które zaczynają się tgif_text. Klauzule, które zawierają ciąg „FileVersion“ są relavent. Przekonasz się, że pierwsza taka klauzula zawiera następujący wiersz:

FileVersion = <2,!,

Oznacza to, wykorzystać tę klauzulę do wersji plików 1 i 2. I druga taka klauzula zawiera:

FileVersion = <6,!,

Oznacza to, wykorzystać tę klauzulę do wersji plików 3 do 6; itd. Dla plików w wersji 32, znajdziesz klauzulę, która zawiera następujący wiersz:

FileVersion = <32,!,

W tym przypadku, to sprawa jest do pliku w wersji 30 do 32. I to wygląda następująco:

tgif_text (Obj, param): –
current_predicate (tgif_file_version, tgif_file_version (_)),
tgif_file_version (FileVersion),
FileVersion = <32,!, Od wersji 30% na, FontSize jest rzeczywisty rozmiar; % TEXTSIZE w starszych wersjach jest wskaźnik wielkości. (Var (obj) -> OutputObj = true; OutputObj = false),
Obj = tekst (_Color, _X, _y, _FontName, _TextStyle, _FontSize, _NumLines,
_TextJust, _TextRotate, _PenPat, _BBoxW, _BBoxH, _id, 0, _Asc, _Des,
_ObjFill, _VSpace, _rotation, _Locked, StrList),
tgif_chk_output (OutputObj, Obj),
Param = [color = _Color, x = _X, y = _y, font_name = _FontName,
text_style = _TextStyle, font_size = _FontSize, num_lines = _NumLines,
text_just = _TextJust, text_rotate = _TextRotate, pen_pat = _PenPat,
bbox_w = _BBoxW, bbox_h = _BBoxH, id = _id, rosn = _Asc, des = _Des,
obj_fill = _ObjFill, v_space = _VSpace, obrót = _rotation,
obj_locked = _Locked, STRS = StrList]
tgif_strs (StrList).

Najważniejszą częścią powyższej klauzuli jest:

Obj = tekst (_Color, _X, _y, _FontName, _TextStyle, _FontSize, _NumLines,
_TextJust, _TextRotate, _PenPat, _BBoxW, _BBoxH, _id, 0, _Asc, _Des,
_ObjFill, _VSpace, _rotation, _Locked, StrList),

To jest to, czego potrzebujesz do korzystania z meczu z obiektu tekstowego w TGIF pliku. Przypomnijmy, z powyższego przykładu:

tekst („niebieski“, 96,64, „Times-Roman“, 0,20,1,1,0,1,94,22,2,0,18,4,0,0,0,0 [
„Hello World“]).

Nie trudno zauważyć, że _Color pasuje „niebieski“, _X pasuje 96, _y pasuje 64, _FontName pasuje „Times-Roman“, …, a na koniec, StrList pasuje [„Hello World“]. W tym przykładzie [„Hello World“] to lista zawiera jeden termin, który jest ciągiem znaków. (W Prologu, łańcuch jest lista znaków, ale niech nie dostać się do tego.)

Karty i podziały wiersza w pliku … w TGIF

W powyższym przykładzie, [„Hello World“] jest podzielona w pliku TGIF.[następuje końca linii i „Hello World“] jest poprzedzona z charakterem. To bardzo ważne, aby pamiętać, że przerwa linii i znak są istotne do TGIF parsera (choć są one ignorowane przez parser Prolog). Zasady nich są nieco trudne do wyjaśnienia. W przypadku generowania pliku TGIF (ręcznie lub za pomocą kodu), należy eksperymentować z TGIF z obiektów, które starają się generować. Zapisz plik i zajrzeć do pliku z edytora tekstu i spróbuj dopasować podziały wiersza i kart. I couse, przetestować go z TGIF i sprawdzić brakujące obiekty po utworzeniu własnego pliku TGIF.

Comments are closed.