Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/dvi/dvilib/dl-dvi-file.hh
diff options
context:
space:
mode:
Diffstat (limited to 'dvi/dvilib/dl-dvi-file.hh')
-rwxr-xr-xdvi/dvilib/dl-dvi-file.hh99
1 files changed, 99 insertions, 0 deletions
diff --git a/dvi/dvilib/dl-dvi-file.hh b/dvi/dvilib/dl-dvi-file.hh
new file mode 100755
index 0000000..d6c0201
--- /dev/null
+++ b/dvi/dvilib/dl-dvi-file.hh
@@ -0,0 +1,99 @@
+#ifndef DL_DVI_FILE_HH
+#define DL_DVI_FILE_HH
+
+#include "dl-dvi-program.hh"
+#include <map>
+#include <list>
+#include <algorithm>
+#include "dl-dvi-fontdefinition.hh"
+#include "dl-loader.hh"
+
+namespace DviLib {
+ const uint N_PAGE_COUNTERS = 10; // \count0 ... \count9
+
+ class DviPageHeader : public RefCounted {
+ public:
+ int count[N_PAGE_COUNTERS];
+ uint address; // address of this page, not the preceding
+ };
+
+ class DviPage : public AbstractDviProgram {
+ DviProgram& program;
+ int count[N_PAGE_COUNTERS]; // \count0 ... \count9
+ public:
+ DviPage (DviProgram& p, int c[N_PAGE_COUNTERS]) :
+ program (p)
+ {
+ for (uint i=0; i<N_PAGE_COUNTERS; ++i)
+ count[i] = c[i];
+ }
+ DviPage (DviPageHeader& h, DviProgram& p) :
+ program (p)
+ {
+ for (uint i=0; i<N_PAGE_COUNTERS; ++i)
+ count[i] = h.count[i];
+ }
+ virtual void execute (DviRuntime& runtime)
+ {
+ program.execute (runtime);
+ }
+ int get_page_count (int i) { return count[i]; }
+ };
+
+ enum DviType {
+ NORMAL_DVI = 2, // FIXME: this should be 2
+ TEX_XET_DVI = 2 // FIXME: is this correct?
+ };
+
+ class DviFilePreamble : public RefCounted {
+ public:
+ // preamble
+ DviType type;
+ uint magnification;
+ uint numerator;
+ uint denominator;
+ string comment;
+ };
+
+ class DviFilePostamble : public RefCounted {
+ public:
+ // postamble
+ DviType type;
+ uint magnification;
+ uint numerator;
+ uint denominator;
+
+ uint last_page_address;
+ uint max_height;
+ uint max_width;
+ uint stack_height;
+ map <uint, DviFontdefinition *> fontdefinitions;
+ };
+
+ class DviFile : public RefCounted {
+ AbstractLoader &loader;
+
+ DviFilePreamble *preamble;
+ DviFilePostamble *postamble;
+
+ uint n_pages;
+ map <uint, DviPageHeader *> page_headers;
+ map <uint, DviPage *> pages;
+
+ public:
+ DviFile (AbstractLoader& l);
+ DviPage *get_page (uint n); /* unref it when done */
+ ~DviFile (void) {}
+ uint get_n_pages () { return n_pages; }
+ DviFontdefinition *get_fontdefinition (uint n)
+ {
+ return postamble->fontdefinitions[n];
+ }
+ uint get_numerator () { return postamble->numerator; }
+ uint get_denominator () { return postamble->denominator; }
+ uint get_magnification () { return postamble->magnification; }
+ };
+
+}
+#endif // DL_DVI_FILE_HH
+