]> www.fi.muni.cz Git - evince.git/blob - dvi/dvilib/dl-dvi-file.cc
Auto*ify dvi and dvi/dvilib
[evince.git] / dvi / dvilib / dl-dvi-file.cc
1 #include "dl-dvi-file.hh"
2 #include "dl-dvi-parser.hh"
3
4 using namespace DviLib;
5
6 DviFile::DviFile (AbstractLoader& l) :
7     loader (l)
8 {
9     DviParser parser (loader);
10     
11     preamble = parser.parse_preamble ();
12     postamble = parser.parse_postamble ();
13     
14     n_pages = 0;
15     uint page_pointer = postamble->last_page_address;
16
17     cout << page_pointer << endl;
18
19     while (page_pointer != (uint)-1)
20     {
21         loader.goto_from_start (page_pointer);
22         
23         page_headers[n_pages++] = 
24             parser.parse_page_header (&page_pointer);
25     }
26 }
27
28 DviPage *
29 DviFile::get_page (uint n)
30 {
31     DviPage *page = pages[n];
32     
33     if (n > get_n_pages())
34         return 0;
35     
36     if (page == 0)
37     {
38         DviParser parser (loader);
39         DviPageHeader *header;
40         DviProgram *program;
41         
42         header = page_headers[n];
43         loader.goto_from_start (header->address + 45);
44         program = parser.parse_program ();
45         
46         page = new DviPage (*program, header->count, postamble->fontmap);
47     }
48     
49     return page;
50 }