ref: a080ae88c6c65503575da220cb131ddada107bf6
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 {
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(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);