ref: 51cd3bfceeb001872d4ff298180875c4229a3d68
dir: /pdf.h/
enum { Obool, /* 7.3.2 */ Onum, /* 7.3.3 */ Ostr, /* 7.3.4 */ Oname, /* 7.3.5 */ Oarray, /* 7.3.6 */ Odict, /* 7.3.7 */ Ostream, /* 7.3.8 */ Onull, /* 7.3.9 */ Oindir, /* 7.3.10 */ }; typedef struct KeyValue KeyValue; typedef struct Object Object; typedef struct Pdf Pdf; typedef struct Xref Xref; struct Object { int type; union { int bool; double num; struct { int len; char str[1]; }; char name[1]; struct { u32int id; u16int gen; }indir; struct { KeyValue *kv; int nkv; }dict; struct { Object **e; int ne; }array; struct { KeyValue *kv; int nkv; u32int length; /* packed */ u32int offset; }stream; }; }; struct KeyValue { char *key; Object *value; }; struct Pdf { void *bio; Xref *xref; int nxref; /* 7.5.4 xref subsection number of objects */ Object *root; /* 7.7.2 root object */ Object *info; /* 14.3.3 info dictionary */ }; struct Xref { u32int id; u32int off; u16int gen; }; Pdf *pdfopen(int fd); void pdfclose(Pdf *pdf); Object *pdfobject(Pdf *pdf, void *b); void freeobject(Object *o); /* * If the object is indirect, resolve it. Operation is not recursive, ie * values of a dictionary won't be resolved automatically. */ int pdfeval(Pdf *pdf, Object *o); int isws(int c); int isdelim(int c); Object *pdfdictget(Object *o, char *name);