DVI (ang. device independent) – format pliku wynikowego w programie wydawniczym TeX. W przeciwieństwie do plików ze znacznikami TeX, pliki DVI nie są przeznaczone do czytania przez użytkownika; zawierają dane binarne opisujące wizualny układ dokumentu w sposób niezależny od specyficznego formatu graficznego, monitora czy drukarki.

Pliki DVI są przetwarzane przez sterownik DVI (DVI driver) na format graficzny akceptowany przez urządzenia wyjściowe. Dla przykładu, większość pakietów TeX zawiera program do podglądu plików DVI na monitorze komputera – program taki jest sterownikiem (ang. driver). Sterowniki są też używane do przetworzenia DVI na popularne formaty dokumentów (np. PostScript, PDF, HTML) i do drukowania. Wikipedie używają sterownika PNG do generowania plików graficznych z matematycznych formuł używanych w artykułach.

Pliki DVI opisują dwa rodzaje monochromatycznych obiektów graficznych: znaki oraz wypełnione prostokąty. Jednakże istnieje możliwość osadzania w DVI dowolnych danych binarnych, za interpretację których odpowiada sterownik; w ten sposób na przykład dodawane są kolory do tekstu, informacje o odnośnikach (wykorzystywane przy tworzeniu dokumentów PDF i HTML), fragmenty kodu Postscriptu i inne. W systemie TeX istnieje specjalna instrukcja pozwalająca autorowi umieszczać tego typu dane – nie są potrzebne żadne dodatkowe programy.

DVI nie jest szyfrowany i znaczniki TeX mogą być przynajmniej częściowo odtworzone z plików DVI za pomocą inżynierii wstecznej, jednak proces ten nie daje gwarancji idealnie wiernego odtworzenia pierwotnych znaczników, zwłaszcza gdy użyte zostały rozszerzenia TeX wysokiego poziomu, jak LaTeX. Wydawcy, którzy opierają się na systemach TeX, oprócz DVI wymagają zwykle także dostarczania plików źródłowych ze znacznikami.

Struktura DVI

edytuj

Format został zaprojektowany tak, aby zarówno tworzenie plików jak i odczyt były łatwe do zaprogramowania, samo zaś tworzenie obrazu polega na interpretacji poleceń bardzo prostej maszyny wirtualnej wykonującej działania na liczbach całkowitych. Rozmiar pliku DVI zawsze jest wielokrotnością 4 bajtów.

Zdefiniowane jest 25 instrukcji, z czego większość występuje w kilku formach, w zależności od rozmiaru argumentu liczbowego. Instrukcje są zakodowane w jednym bajcie, natomiast liczby mogą być 1-, 2-, 3- i 4-bajtowe (zawsze zapisywane w porządku big endian, jeśli ujemne – zapisane w kodzie uzupełnień do 2).

Najprostszy sterownik DVI wymaga niewielkiej liczby struktur danych:

  • lista zdefiniowanych fontów – font jest identyfikowany liczbą,
  • stos parametrów.

Aktualne parametry maszyny to 6 liczb:

  • bieżący punkt (H, V) – odległość od lewego górnego rogu strony (H – ang. horizontal, V – ang. vertical)
  • X – przyrost w osi X
  • W – przyrost w osi X
  • Y – przyrost w osi Y
  • Z – przyrost w osi Y

Lista instrukcji

edytuj
  • rysowanie:
    • fnt_def lista argumentów – definicja fontu – sterownik ładuje wskazany font i przypisuje mu identyfikator liczbowy
    • fnt_num identyfikator – ustawia bieżący font (podawany jest identyfikator uprzednio zdefiniowanego fontu)
    • put_char numer znaku – stawia na pozycji (H,V) znak z bieżącego fontu; ponieważ numer może być 32-bitową liczbą naturalną, więc liczba różnych znaków w jednym foncie jest ograniczona do 4 miliardów
    • set_char numer znaku – jw., dodatkowo przesuwa w prawo bieżący punkt o szerokość postawionego znaku
    • put_rule wysokość, szerokość – wypełnia prostokąt o wskazanych wymiarach na pozycji (H,V)
    • set_rule wysokość, szerokość – jw., dodatkowo przesuwa w prawo bieżący punkt o szerokość prostokąta
    • xxx liczba bajtów, dane binarne – dodatkowe dane, których interpretacja zależy od sterownika DVI (ostatecznie mogą zostać całkowicie zignorowane)
  • przesuwanie bieżącego punktu w osi X:
    • right liczba – dodaje do H liczbę
    • w0 – dodaje do H parametr W
    • x0 – dodaje do H parametr X
    • w liczba – ustawia nową wartość W, dodaje ją również do H
    • x liczba – ustawia nową wartość X, dodaje ją również do H
  • przesuwanie bieżącego punktu w osi Y:
    • down liczba – dodaje do V liczbę
    • y0 – dodaje do V parametr Y
    • z0 – dodaje do V parametr Z
    • y liczba – ustawia nową wartość Y, dodaje ją również do V
    • z liczba – ustawia nową wartość Z, dodaje ją również do V
  • pozostałe:
    • push – zapamiętuje parametry na stosie
    • pop – odtwarza parametry ze stosu
    • bop – znacznik początku strony (stos jest pusty, wszystkie parametry są zerowane, nie ma ustawionego fontu)
    • eop – znacznik końca strony
    • nop – nic nie robi
  • dokument:
    • pre – preambuła dokumentu, w której podawane są: jednostka strony, współczynnik powiększenia oraz komentarz
    • post – epilog dokumentu; za tym znacznikiem znajduje się lista wszystkich fontów zdefiniowanych w całym dokumencie – dzięki temu interpreter może od razu załadować je wszystkie i ewentualnie poinformować użytkownika o brakujących fontach, bez konieczności przetwarzania całego dokumentu
    • post_post – znacznik końca listy fontów za znacznikiem post

Linki zewnętrzne

edytuj